qishibo/AnotherRedisDesktopManager · error

TTL Error: ${e.message}

Error message

TTL Error: ${e.message}

What it means

KeyHeader.vue calls client.ttl(key) when a key tab is opened or refreshed (including via the auto-refresh timer); a rejection shows 'TTL Error: <e.message>'. TTL is a read command and not in the writeCMD table, so readonly never causes this - the usual causes are a connection that has been closed (timer firing after a disconnect) or an ACL restriction on @read.

Source

Thrown at src/components/KeyHeader.vue:99

      binary: false,
      autoRefresh: false,
      refreshInterval: 2000,
    };
  },
  props: ['client', 'redisKey', 'keyType', 'hotKeyScope'],
  methods: {
    initShow() {
      const key = this.redisKey;
      const { client } = this;

      // reset name input
      this.keyName = key;
      this.binary = !this.$util.bufVisible(key);

      client.ttl(key).then((reply) => {
        this.keyTTL = reply;
      }).catch((e) => {
        this.$message.error(`TTL Error: ${e.message}`);
      });
    },
    changeKeyInput(keyInput) {
      this.keyName = this.binary ? this.$util.xToBuffer(keyInput) : Buffer.from(keyInput);
    },
    refreshKey() {
      this.initShow();
      this.$emit('refreshContent');
    },
    refreshInit() {
      this.refreshTimer && clearInterval(this.refreshTimer);

      if (this.autoRefresh) {
        this.refreshKey();

        this.refreshTimer = setInterval(() => {
          this.refreshKey();
        }, this.refreshInterval);

View on GitHub (pinned to c149855106)

Solutions

  1. Reconnect - the tab re-fetches TTL on initShow/refreshKey.
  2. Close stale key tabs after network changes to stop the refresh timer from firing on a dead connection.
  3. If 'NOPERM', grant the ACL user +ttl or +@read.
Defensive patterns

Strategy: try-catch

Validate before calling

// stop the auto-refresh timer when the connection status is unknown
if (client.status !== 'ready') { this.refreshTimer && clearInterval(this.refreshTimer); return; }

Try / catch

client.ttl(key).then((reply) => { this.keyTTL = reply; }).catch((e) => {
  // non-fatal: blank the TTL display instead of alarming the user on a dead connection
  this.keyTTL = null;
  this.$message.error(`TTL Error: ${e.message}`);
});

Prevention

When it happens

Trigger: Auto-refresh timer firing after the connection dropped (VPN change, server restart); key tab left open across a sleep/resume; ACL user denied TTL (-ttl / missing @read).

Common situations: Laptop sleep/resume with key tabs open; server restart during browsing; restrictive ACL users.

Related errors


AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22). Data as JSON: /api/errors/d187c222887c9dc1. Report an issue: GitHub.