qishibo/AnotherRedisDesktopManager · error

e.message

Error message

e.message

What it means

Toast showing e.message when the sorted-set page fetch fails in KeyContentZset.vue:177. listScan() picks zrangeBuffer or zrevrangeBuffer based on sortType and issues [key, start, end, 'WITHSCORES']; any rejection stops loading, clears the spinner and disables pagination. Typical rejections: WRONGTYPE (key no longer a zset), dropped connection, READONLY from a replica, or OOM refusing reads during memory pressure.

Source

Thrown at src/components/contents/KeyContentZset.vue:177

      this.scanStream = null;
      this.oneTimeListLength = 0;
      this.loadMoreDisable = false;
    },
    getListRange(resetTable) {
      const start = this.pageSize * this.pageIndex;
      const end = start + this.pageSize - 1;
      const sortMethod = this.sortType === 'ASC' ? 'zrangeBuffer' : 'zrevrangeBuffer';

      this.client[sortMethod]([this.redisKey, start, end, 'WITHSCORES']).then((reply) => {
        const zsetData = this.solveList(reply);

        this.zsetData = resetTable ? zsetData : this.zsetData.concat(zsetData);
        (zsetData.length < this.pageSize) && (this.loadMoreDisable = true);
        this.loadingIcon = '';
      }).catch((e) => {
        this.loadingIcon = '';
        this.loadMoreDisable = true;
        this.$message.error(e.message);
      });
    },
    getListScan() {
      if (!this.scanStream) {
        this.initScanStream();
      } else {
        this.oneTimeListLength = 0;
        this.scanStream.resume();
      }
    },
    initScanStream() {
      const scanOption = { match: this.getScanMatch(), count: this.pageSize };
      scanOption.match != '*' && (scanOption.count = this.searchPageSize);

      this.scanStream = this.client.zscanBufferStream(
        this.redisKey,
        scanOption,
      );

View on GitHub (pinned to c149855106)

Solutions

  1. Reload the key — WRONGTYPE means the member/score table no longer corresponds to a zset
  2. Reconnect on connection-error messages and press load-more again; ZRANGE is stateless
  3. Toggle sort order (ASC/DESC) after reconnect to force a fresh stream/scan reset
  4. Verify the endpoint is a master or allow reads on replicas when operating clusters

Example fix

// before
}).catch((e) => {
  this.loadingIcon = '';
  this.loadMoreDisable = true;
  this.$message.error(e.message);
});

// after: keep 'load more' available for transient failures
}).catch((e) => {
  this.loadingIcon = '';
  this.loadMoreDisable = /WRONGTYPE|READONLY/.test(e.message);
  this.$message.error(e.message);
});
Defensive patterns

Strategy: try-catch

Validate before calling

if (this.client.status !== 'ready') {
  this.$message.error(`connection not ready (${this.client.status})`);
  return;
}

Try / catch

.catch((e) => {
  this.loadingIcon = '';
  this.loadMoreDisable = /WRONGTYPE|READONLY/.test(e.message);
  this.$message.error(`ZRANGE: ${e.message}`);
})

Prevention

When it happens

Trigger: ZRANGE ... WITHSCORES rejected when: the key was deleted and recreated as another type between page loads; the connection closes mid-pagination ('Connection is closed'); a cluster failover redirects to a replica that answers READONLY; the end index math (start + pageSize - 1) runs against a key that shrank, though Redis clamps indexes rather than erroring, so type/connection causes dominate.

Common situations: Paging large leaderboards while a job rebuilds the zset (DEL + ZADD in a loop); VPN/TCP resets during long browsing sessions; browsing replicas that are read-only for commands the client issues during topology churn.

Related errors


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