Redis XRANGE Java (Detailed Guide w/ Code Examples)

Use Case(s)

XRANGE is a command in Redis Stream which returns the range of elements in a stream. In Java, when working with a Redis database, you might use the XRANGE command to:

  1. Retrieve a set of messages from a stream between two IDs for data analysis.
  2. Monitor activity within a certain period by fetching events based on their IDs.

Code Examples

Let's assume we are using Lettuce, a scalable thread-safe Redis client for synchronous, asynchronous, and reactive usage. The xrange method can be used to get the range of elements.

Example 1: Fetch all messages in a stream -

RedisClient redisClient = RedisClient.create("redis://localhost:6379"); StatefulRedisConnection<String, String> connection = redisClient.connect(); RedisCommands<String, String> syncCommands = connection.sync(); // Assuming 'mystream' already has data List<StreamMessage<String, String>> messages = syncCommands.xrange("mystream", Range.unbounded()); messages.forEach(message -> System.out.println(message.getBody()));

In this snippet, we connect to a local Redis server and fetch all messages from 'mystream'. Each message's content is printed to the console.

Example 2: Fetch messages within a specific ID range -

// Using the same setup as before... List<StreamMessage<String, String>> messages = syncCommands.xrange("mystream", Range.create("1526985055631-0", "1526985091638-0")); messages.forEach(message -> System.out.println(message.getBody()));

Here we fetch messages within a specific range of IDs (from "1526985055631-0" to "1526985091638-0").

Best Practices

  1. When working with large streams, avoid fetching the entire stream with XRANGE as it could potentially return a lot of data and consume significant memory and network resources.

  2. It's beneficial to understand the structure of Redis Stream IDs when using XRANGE, which includes a timestamp and sequence number.

Common Mistakes

  1. Not handling potential connection issues: Always ensure that error handling is in place for scenarios where the connection to the Redis server might be lost or unavailable.
  2. Using wrong types for stream names or ID values: Ensure that stream names and ID values are defined as strings.


Q: What happens if there are no messages within the specified range in XRANGE?

A: If no messages exist within the specified range, XRANGE simply returns an empty list.

Q: How does Redis handle ranges when the bounds do not exist in the stream?

A: If the lower bound is less than the smallest ID in the stream, Redis will start at the lowest ID. Conversely, if the upper bound is greater than highest ID, Redis will end the range at the highest ID.

Was this content helpful?

Start building today

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