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
- Reload the key view before deleting so the row reflects current membership
- If it recurs on one row, dump that row as a VADD command and compare the exact element bytes for whitespace/binary differences
- 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
- Interpret a 0 VREM reply as 'already removed', not as a failure — refresh the list instead of alarming the user
- Reload membership before deleting rows from a list built by random sampling
- Compare exact element bytes (dump as VADD) when a row mysteriously never deletes
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
- e.message
- You are in readonly mode! Unable to execute write command!
- Persist Error: ${e.message}
- e.message
- this.$t('message.info_disabled')
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/b5b556f2bd174b19.
Report an issue: GitHub.