> ## Documentation Index
> Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# XDELEX

> Extended delete for streams with reference control.

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

<ParamField body="key" type="string" required>
  The key of the stream.
</ParamField>

<ParamField body="option" type="'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.
</ParamField>

<ParamField body="ids" type="...string[]" required>
  One or more stream entry IDs to delete. When an option is provided, IDs must come after the option.
</ParamField>

## Response

<ResponseField type="number[]" required>
  An array of numbers indicating the result for each ID in the same order as provided.
</ResponseField>

<RequestExample>
  ```ts Single Entry theme={"system"}
  // Delete a single stream entry
  const result = await redis.xdelex("mystream", "1638360173533-0");
  console.log(result); // Array of results for each ID
  ```

  ```ts Multiple Entries theme={"system"}
  // 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
  ```

  ```ts With Option theme={"system"}
  // 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
  ```

  ```ts With Stream Processing theme={"system"}
  // 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
  ```

  ```ts Cleanup Old Entries theme={"system"}
  // 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
  }
  ```
</RequestExample>

## 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

<Note>
  This command is available in Redis 8.2.0 and later. It provides extended functionality compared to the standard XDEL command.
</Note>
