Databases 9 min read

Master Redis: 16 Real-World Patterns for Caching, Locks, and More

This guide explores 16 practical Redis use cases—including caching, distributed sessions, locks, global IDs, counters, rate limiting, bitmaps, shopping carts, timelines, message queues, lotteries, likes, product tags, filtering, follow models, and ranking—providing code snippets and implementation tips for each pattern.

macrozheng
macrozheng
macrozheng
Master Redis: 16 Real-World Patterns for Caching, Locks, and More

1. Caching

String type. Example: hot data cache (e.g., reports, trending items), object cache, full‑page cache, which can improve access speed for frequently accessed data.

2. Distributed Data Sharing

String type, because Redis is a distributed independent service that can be shared across multiple applications.

Example: distributed session.

<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
</dependency>

3. Distributed Lock

String type setnx method, succeeds only when the key does not exist and returns true.

public static boolean getLock(String key) {
    Long flag = jedis.setnx(key, "1");
    if (flag == 1) {
        jedis.expire(key, 10);
    }
    return flag == 1;
}

public static void releaseLock(String key) {
    jedis.del(key);
}

4. Global ID

int type, incrby, using atomicity.

Example: incrby userid 1000 – suitable for sharding scenarios to obtain a range of IDs.

5. Counter

int type, incr method.

Examples: article view count, social media likes; can tolerate some delay by writing to Redis first and syncing to the database later.

6. Rate Limiting

int type, incr method.

Use visitor IP and other information as the key; each request increments the count, and exceeding the limit returns false.

7. Bit Statistics

String type bitcount (bitmap data structure introduced in Redis 1.6.6).

Characters are stored as 8‑bit binary.

set k1 a
setbit k1 6 1
setbit k1 7 0
get k1
/* 6 7 represent bits of 'a' (ASCII 97 = 01100001) */

Applications: online user statistics, retention statistics.

setbit onlineusers 01
setbit onlineusers 11
setbit onlineusers 20

Supports bitwise AND, OR, XOR, NOT operations.

BITOPAND destkey key1 key2 ...
BITOPOR destkey key1 key2 ...
BITOPXOR destkey key1 key2 ...
BITOPNOT destkey key

Example: compute users online for seven consecutive days.

BITOP "AND" "7_days_both_online_users" "day_1_online_users" "day_2_online_users" ... "day_7_online_users"

8. Shopping Cart

String or hash. All operations possible with strings can be done with hashes.

key: user id; field: product id; value: quantity.

+1: hincr, -1: hdecr, delete: hdel, get all: hgetall, count fields: hlen.

9. User Timeline

list, a doubly linked list, can be used directly as a timeline; insertion keeps order.

10. Message Queue

List provides two blocking pop operations: blpop and brpop, with optional timeout.

blpop key timeout – removes and returns the first element, blocks until an element is available or timeout.

brpop key timeout – removes and returns the last element, blocks similarly.

These correspond to Java's blocking queue. Queue (FIFO): rpush + blpop. Stack (LIFO): rpush + brpop.

11. Lottery

Random value retrieval.

spop myset

12. Like / Check‑in / Punch‑in

Assume a post ID t1001 and a user ID u3001.

Use like:t1001 to store all users who liked the post.

sadd like:t1001 u3001 – like

srem like:t1001 u3001 – unlike

sismember like:t1001 u3001 – check like

smembers like:t1001 – list all likers

scard like:t1001 – count likes

13. Product Tags

Maintain product tags with tags:i5001.

sadd tags:i5001 "clear picture"

sadd tags:i5001 "true color display"

sadd tags:i5001 "excellent workflow"

14. Product Filtering

// Get difference
sdiff set1 set2
// Get intersection
sinter set1 set2
// Get union
sunion set1 set2

Example: iPhone11 released.

sadd brand:apple iPhone11
sadd brand:ios iPhone11
sad screensize:6.0-6.24 iPhone11
sad screentype:lcd iPhone11

Filter products that are Apple, iOS, screen size 6.0‑6.24, and LCD.

sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd

15. Follow / Recommendation Model

follow – following, fans – followers.

Mutual follow:

sadd 1:follow 2

sadd 2:fans 1

sadd 1:fans 2

sadd 2:follow 1

People I follow also follow them (intersection):

sinter 1:follow 2:fans

Potential acquaintances (difference):

sdiff 2:follow 1:follow

sdiff 1:follow 2:follow

16. Ranking

Increment news click count: zincrby hotNews:20190926 1 n6001 Get top 15 items for today:

zrevrange hotNews:20190926 0 15 withscores
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

redisdistributed-lockBitmaps
macrozheng
Written by

macrozheng

Dedicated to Java tech sharing and dissecting top open-source projects. Topics include Spring Boot, Spring Cloud, Docker, Kubernetes and more. Author’s GitHub project “mall” has 50K+ stars.

0 followers
Reader feedback

How this landed with the community

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.