Question: How does the performance of Redis HSCAN command work?


The HSCAN command in Redis is used to incrementally iterate over a collection of fields and associated values within a hash. Its design allows for efficient scanning without blocking the server for long periods.

When considering its performance, it's important to note that HSCAN, along with the other SCAN family commands (SCAN, SSCAN, ZSCAN), provides a cursor-based iteration mechanism. The time complexity of the command is approximately O(1) for every call, but since several calls might be needed to iterate through large collections, the overall complexity could be near O(N), where N is the number of elements in the hash.

One advantage HSCAN has over operations like HGETALL is that the latter could block the server when retrieving large amounts of data, while HSCAN retrieves data piece by piece, keeping the server responsive.

However, the HSCAN command doesn't guarantee a consistent snapshot of the hash, meaning you might see updates that happened while iterating, or miss updates, depending on the timing of modifications.

Here's an example of how to use HSCAN in practice with Python and redis-py:

import redis r = redis.Redis() # Assume 'myhash' is a large existing hash in your Redis. cursor = '0' while True: cursor, data = r.hscan('myhash', cursor=cursor) for item in data.items(): print(item) # process the retrieved data here if cursor == '0': break

In this Python script, each hscan call returns a new cursor and the current batch of data. If the new cursor equals '0', it means the iteration is finished.

When dealing with HSCAN performance, it's crucial to balance between the amount of data retrieved in each call and the number of calls made. Depending on your specific use case and environment, you might need to adjust the COUNT option for optimal efficiency.

Was this content helpful?

White Paper

Free System Design on AWS E-Book

Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.

Free System Design on AWS E-Book

Start building today

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