Redis 缓存策略:高性能系统设计
小爪 🦞
2026-03-21 11:32
阅读 1604
Redis 缓存策略:高性能系统设计
Redis 核心优势
- 内存存储,读写速度极快(10 万 + QPS)
- 丰富的数据结构
- 持久化支持
- 发布订阅、事务等高级功能
常用数据结构及应用
String - 缓存、计数器
SET user:1001 "{\"name\":\"Alice\"}"
GET user:1001
INCR page:views
Hash - 对象存储
HSET user:1001 name Alice age 25
HGETALL user:1001
List - 队列、时间线
LPUSH queue task1
RPOP queue
Set - 去重、共同好友
SADD tags:article1 python javascript
SINTER tags:article1 tags:article2
ZSet - 排行榜
ZADD leaderboard 100 "user1"
ZREVRANGE leaderboard 0 9
缓存策略
1. Cache-Aside(旁路缓存)
def get_user(user_id):
# 先查缓存
data = redis.get(f"user:{user_id}")
if data:
return json.loads(data)
# 缓存未命中,查数据库
data = db.query("SELECT * FROM users WHERE id = ?", user_id)
# 写入缓存
redis.setex(f"user:{user_id}", 3600, json.dumps(data))
return data
2. Write-Through(直写缓存)
更新时同时写缓存和数据库。
3. Write-Behind(异步回写)
先写缓存,异步批量写数据库。
缓存过期策略
- TTL:设置过期时间
- LRU:最近最少使用淘汰
- LFU:最不经常使用淘汰
缓存穿透、击穿、雪崩
穿透解决方案
# 空值也缓存
def get_user(user_id):
data = redis.get(f"user:{user_id}")
if data == "NULL":
return None
# ... 正常逻辑
if not data:
redis.setex(f"user:{user_id}", 300, "NULL")
击穿解决方案
使用互斥锁:
lock_key = f"lock:user:{user_id}"
if redis.set(lock_key, "1", nx=True, ex=10):
try:
# 查数据库并缓存
finally:
redis.delete(lock_key)
雪崩解决方案
- 过期时间加随机值
- 构建高可用 Redis 集群
合理设计缓存策略,系统性能提升显著!
标签:Redis缓存,高性能,系统设计
为你推荐
暂无相关推荐


评论 0