qishibo/AnotherRedisDesktopManager · warning

this.$t('message.delete_failed')

Error message

this.$t('message.delete_failed')

What it means

deleteLine() calls client.lrem(redisKey, 1, row.value); LREM removes up to count occurrences matching the value and returns the number removed. The UI treats a reply of 0 as delete_failed: the exact value row.value was not present in the list (anymore), so nothing was removed and the table row is intentionally kept.

Source

Thrown at src/components/contents/KeyContentList.vue:279

        this.$t('message.confirm_to_delete_row_data'),
        { type: 'warning' },
      ).then(() => {
        this.client.lrem(
          this.redisKey,
          1,
          row.value,
        ).then((reply) => {
          if (reply > 0) {
            this.$message.success({
              message: this.$t('message.delete_success'),
              duration: 1000,
            });

            // this.initShow(); // do not reinit, #786
            this.listData.splice(this.listData.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(() => {});
    },
  },
  mounted() {
    this.initShow();
  },
  beforeDestroy() {
    this.cancelScanning = true;
  },
};
</script>

View on GitHub (pinned to c149855106)

Solutions

  1. Click reload on the key tab to resync the table; the row usually disappears on its own because it no longer exists server-side
  2. If the row still shows after reload, suspect encoding: view the value in hex/binary mode and delete by index instead (LSET key index '' + LREM, or a transaction using LINDEX to verify bytes)
  3. Coordinate with other clients/workers consuming the list so deletions don't race
  4. Confirm you are connected to the same DB/node the key lives in (replica read-only views can show stale rows)

Example fix

// before: error toast only; stale row stays in the table
} else {
  this.$message.error({
    message: this.$t('message.delete_failed'),
    duration: 1000,
  });
}

// after: a 0 reply means the value is already gone — resync and drop the stale row
} else {
  this.$message.warning({
    message: this.$t('message.delete_failed'),
    duration: 1000,
  });
  this.listData.splice(this.listData.indexOf(row), 1);
  this.total--;
}
Defensive patterns

Strategy: fallback

Validate before calling

// verify the exact value still exists before asking LREM (Redis 6.2+)
const idx = await client.lpos(this.redisKey, row.value).catch(() => null);
if (idx === null) {
  // already gone server-side: just drop the stale row locally
  this.listData.splice(this.listData.indexOf(row), 1);
  this.total--;
  return;
}

Type guard

null

Try / catch

// treat a 0 reply as resync, not as a hard error
client.lrem(this.redisKey, 1, row.value).then((reply) => {
  if (reply > 0) {
    this.listData.splice(this.listData.indexOf(row), 1);
    this.total--;
  } else {
    this.$message.warning('Value not found — refreshing');
    this.resetTable();
    this.initShow();
  }
}).catch((e) => this.$message.error(e.message));

Prevention

When it happens

Trigger: LREM key 1 <value> returning 0: another client already removed or altered that exact value between rendering the table and the user confirming deletion; the row's displayed value differs byte-wise from what is stored (binary/encoding mismatch, so LREM finds no match); key flushed/recreated with different items.

Common situations: List is a shared work queue being consumed by workers (LPOP/RPOPLPOP) while a user deletes rows in the GUI; two sessions viewing the same key with one stale; values containing non-UTF8 bytes displayed with replacement characters — the copy sent to LREM never matches; deleting right after another admin's cleanup.

Related errors


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