qishibo/AnotherRedisDesktopManager · warning

this.$t('message.delete_failed')

Error message

this.$t('message.delete_failed')

What it means

VREM completed without an exception but replied 0: the element was not a member of the set. This is not a server error — the row shown is stale. Common when the element was already removed by another session, the list came from VRANDMEMBER sampling (stale snapshot on Redis < 8.4), or the element string differs subtly (trailing whitespace or binary bytes).

Source

Thrown at src/components/contents/KeyContentVector.vue:416

      return 'NOQUANT';
    },
    deleteLine(row) {
      this.$confirm(
        this.$t('message.confirm_to_delete_row_data'),
        { type: 'warning' },
      ).then(() => {
        this.client.call('VREM', this.redisKey, row.element).then((reply) => {
          if (reply > 0) {
            this.$message.success({
              message: this.$t('message.delete_success'),
              duration: 1000,
            });

            this.vectorData.splice(this.vectorData.indexOf(row), 1);
            this.total --;
          }
          else {
            this.$message.error({
              message: this.$t('message.delete_failed'),
              duration: 1000,
            });
          }
        }).catch((e) => { this.$message.error(e.message); });
      }).catch(() => {});
    },
    buildDumpCommand(line, detail) {
      const vector = detail.vector || [];
      const args = [
        'VADD',
        this.$util.bufToQuotation(this.redisKey),
        'VALUES',
        this.dim,
        ...vector,
        this.$util.bufToQuotation(line.element),
      ];

View on GitHub (pinned to c149855106)

Solutions

  1. Reload the key view before deleting so the row reflects current membership
  2. If it recurs on one row, dump that row as a VADD command and compare the exact element bytes for whitespace/binary differences
  3. Treat the toast as 'already gone': refresh instead of retrying the delete
Defensive patterns

Strategy: validation

Validate before calling

// best-effort membership check before deleting
const emb = await client.call('VEMB', key, element).catch(() => null);
if (emb === null) {
  return this.$message.warning('Element already removed');
}

Type guard

const wasRemoved = (reply) => Number(reply) === 0;

Try / catch

const reply = await client.call('VREM', key, element);
if (reply > 0) {
  this.vectorData.splice(this.vectorData.indexOf(row), 1);
  this.total--;
} else {
  // 0 = already gone: treat as success and resync instead of erroring
  this.initShow();
}

Prevention

When it happens

Trigger: Two GUI sessions on the same key; a list sampled minutes ago via VRANDMEMBER; element names containing invisible characters that render identically but compare differently.

Common situations: Concurrent cleanup scripts pruning elements; shared dev keys edited by teammates; binary element names displayed via a lossy string conversion.

Related errors


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