Databases 9 min read

Implementing Pagination and Multi‑Condition Fuzzy Search in Redis

By leveraging Redis sorted sets for ordered pagination and hash fields with HSCAN for multi‑condition fuzzy matching, the article shows how to build a cached query pipeline that creates temporary ZSets keyed by pattern, supports efficient page retrieval, and uses expirations and refresh strategies to balance freshness and performance.

Java Tech Enthusiast
Java Tech Enthusiast
Java Tech Enthusiast
Implementing Pagination and Multi‑Condition Fuzzy Search in Redis

Introduction

Redis is a high‑performance in‑memory database that supports basic data types but does not provide native fuzzy or conditional queries. This article outlines a practical solution for combining pagination with multi‑condition fuzzy search using Redis primitives.

Pagination with ZSet

Sorted Sets (ZSet) are ideal for ordered pagination. The essential commands are:

ZADD key score member [[score,member]…] – adds members with a score used for ordering.

ZREVRANGE key start stop – returns members in a given range, enabling page retrieval.

ZREM key member – removes a member, useful for deleting comments.

Because ZSet maintains order, it is generally preferred over List for pagination when sorting or score‑based filtering is required.

Multi‑Condition Fuzzy Query with Hash

Redis hashes can store records where the field name encodes searchable attributes, e.g. <id>:<name>:<gender> . The HSCAN command iterates over all fields and supports pattern matching, allowing queries such as *:*:male or 100*:*:* to filter by gender or ID prefix.

Combining Pagination and Fuzzy Search

The workflow is:

Construct a query pattern (e.g., *:*:female ).

Check if a ZSet with that pattern already exists.

If not, use HSCAN to collect matching hash fields, store the keys in a new ZSet, and set the pattern as the ZSet key.

Perform pagination on the cached ZSet with ZREVRANGE .

This approach caches query results, avoiding repeated full scans.

Performance Optimizations

To prevent cache bloat, each generated ZSet is given an expiration time that is refreshed on hits. For data freshness, two strategies are suggested:

Insert new hash entries into all relevant ZSets immediately (requires a naming convention to identify target sets).

Periodically refresh cached ZSets, trading freshness for lower write overhead.

Conclusion

The article provides a concise, implementation‑oriented guide for achieving pagination and multi‑condition fuzzy search in Redis, along with practical tips for caching and performance tuning.

performance optimizationRedispaginationfuzzy searchhashZset
Java Tech Enthusiast
Written by

Java Tech Enthusiast

Sharing computer programming language knowledge, focusing on Java fundamentals, data structures, related tools, Spring Cloud, IntelliJ IDEA... Book giveaways, red‑packet rewards and other perks await!

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.