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 集群

合理设计缓存策略,系统性能提升显著!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝