Skip to main content
The XDELEX command provides extended deletion capabilities for stream entries with additional control options. This is an enhanced version of XDEL with more advanced features for managing stream data.

Arguments

key
string
required
The key of the stream.
option
'KEEPREF' | 'keepref' | 'DELREF' | 'delref' | 'ACKED' | 'acked'
Optional deletion behavior (case-insensitive). When provided, must come before the IDs:
  • KEEPREF: Keep consumer group references
  • DELREF: Delete consumer group references
  • ACKED: Only acknowledge messages (don’t delete)
If not provided, entries are deleted by default.
ids
...string[]
required
One or more stream entry IDs to delete. When an option is provided, IDs must come after the option.

Response

An array of numbers indicating the result for each ID in the same order as provided.
// Delete a single stream entry
const result = await redis.xdelex("mystream", "1638360173533-0");
console.log(result); // Array of results for each ID
// Delete multiple stream entries
const result = await redis.xdelex(
  "mystream", 
  "1638360173533-0",
  "1638360173533-1",
  "1638360173533-2"
);
console.log(result); // Array of results for each ID
// Use KEEPREF option to keep consumer group references
const result = await redis.xdelex(
  "mystream",
  "KEEPREF",
  "1638360173533-0",
  "1638360173533-1"
);
console.log(result); // Array of results for each ID

// Use DELREF option to delete consumer group references
const result2 = await redis.xdelex(
  "mystream",
  "DELREF",
  "1638360173533-0"
);
console.log(result2); // Array of results for each ID

// Use ACKED option to only acknowledge (don't delete)
const result3 = await redis.xdelex(
  "mystream",
  "ACKED",
  "1638360173533-0"
);
console.log(result3); // Array of results for each ID
// Add entries to stream
await redis.xadd("events", "*", { type: "login", user: "john" });
await redis.xadd("events", "*", { type: "logout", user: "john" });

// Read entries
const entries = await redis.xrange("events", "-", "+");
console.log(entries);

// Delete specific entries
const deleted = await redis.xdelex(
  "events",
  entries[0][0], // First entry ID
  entries[1][0]  // Second entry ID
);
console.log(`Results: ${deleted}`); // Array of results for each ID
// Get entries older than a certain timestamp
const oldEntries = await redis.xrange("logs", "-", "1638360000000-0");

// Delete old entries
if (oldEntries.length > 0) {
  const ids = oldEntries.map(entry => entry[0]);
  const deleted = await redis.xdelex("logs", ...ids);
  console.log(`Results: ${deleted}`); // Array of results for each ID
}

Use Cases

  • Stream Cleanup: Remove processed or expired stream entries
  • Data Retention: Implement custom retention policies
  • Error Handling: Delete corrupted or invalid stream entries
  • Memory Management: Clean up streams to free memory
This command is available in Redis 8.2.0 and later. It provides extended functionality compared to the standard XDEL command.