Redis XSETID in Golang (Detailed Guide w/ Code Examples)

Use Case(s)

The XSETID command in Redis is typically used for setting the last delivered ID of a stream. This can be useful in different scenarios where you want to ensure idempotency in message delivery or reset the stream reading position.

Code Examples

Here's an example on how to use XSETID command with go-redis library:

package main import ( "" "context" ) func main() { ctx := context.Background() client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) stream := "mystream" id := "1000000" // Execute the XSETID command res := client.Do(ctx, "XSETID", stream, id) if res.Err() != nil { panic(res.Err()) } }

In this example, we're connecting to a Redis instance running locally. We then use XSETID to set the last delivered ID of the stream named mystream to 1000000. If there's any error executing the command, it will cause the program to panic and print the error.

Best Practices

  1. Always check for errors while executing Redis commands. It helps in identifying issues like connectivity problems, wrong command usage, etc.

  2. Use XSETID judiciously. Incorrect usage can disrupt the usual flow of message processing in stream.

Common Mistakes

  1. Trying to use XSETID on a non-existent stream. This will lead to an error as the stream must exist before you can set its last ID.

  2. Setting an ID which is lower than an existing ID in the stream. It might lead to unexpected behavior while reading messages from the stream.


Q: Can I use XSETID to create a new stream?

A: No, XSETID can only be used on existing streams. To create a stream you need to add at least one item using XADD.

Q: What happens if I set an ID that's higher than any existing ID in the stream?

A: Redis doesn't complain about this. However, until a message with this ID or higher is added, consumers won't see any new message even if they're reading with $ (which usually reads new messages).

Was this content helpful?

Start building today

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.