# 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="str" required>
  The key of the stream.
</ParamField>

<ParamField body="ids" type="*List[str]" required>
  One or more stream entry IDs to delete.
</ParamField>

<ParamField body="option" type="Literal['KEEPREF', 'DELREF', 'ACKED', 'keepref', 'delref', 'acked']">
  Optional deletion behavior (case-insensitive):
  - `KEEPREF` or `keepref`: Keep consumer group references
  - `DELREF` or `delref`: Delete consumer group references
  - `ACKED` or `acked`: Only acknowledge messages (don't delete)
</ParamField>

## Response

<ResponseField type="List[int]" required>
  A list of integers indicating the result for each ID in the same order as provided.
</ResponseField>

<RequestExample>
```py Single Entry
# Delete a single stream entry
result = redis.xdelex("mystream", "1638360173533-0")
print(result)  # List of results for each ID
```

```py Multiple Entries
# Delete multiple stream entries
result = redis.xdelex(
    "mystream",
    "1638360173533-0",
    "1638360173533-1",
    "1638360173533-2"
)
print(result)  # List of results for each ID
```

```py With Option
# Use KEEPREF option to keep consumer group references
result = redis.xdelex(
    "mystream",
    "1638360173533-0",
    "1638360173533-1",
    option="KEEPREF"
)
print(result)  # List of results for each ID

# Use DELREF option to delete consumer group references
result = redis.xdelex(
    "mystream",
    "1638360173533-0",
    option="DELREF"
)
print(result)  # List of results for each ID

# Use ACKED option to only acknowledge (don't delete)
result = redis.xdelex(
    "mystream",
    "1638360173533-0",
    option="ACKED"
)
print(result)  # List of results for each ID
```

```py With Stream Processing
# Add entries to stream
redis.xadd("events", "*", {"type": "login", "user": "john"})
redis.xadd("events", "*", {"type": "logout", "user": "john"})

# Read entries
entries = redis.xrange("events", "-", "+")
print(entries)

# Delete specific entries
deleted = redis.xdelex(
    "events",
    entries[0][0],  # First entry ID
    entries[1][0]   # Second entry ID
)
print(f"Results: {deleted}")  # List of results for each ID
```

```py Cleanup Old Entries
# Get entries older than a certain timestamp
old_entries = redis.xrange("logs", "-", "1638360000000-0")

# Delete old entries
if old_entries:
    ids = [entry[0] for entry in old_entries]
    deleted = redis.xdelex("logs", *ids)
    print(f"Results: {deleted}")  # List 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>
