Redis 缓存策略实战:高性能缓存设计完全指南
Redis 缓存策略实战:高性能缓存设计完全指南

Redis 缓存策略实战:高性能缓存设计完全指南

Redis 缓存策略实战:高性能缓存设计完全指南

Redis 是高性能的内存数据库,广泛用于缓存、会话管理、排行榜等场景。本文深入讲解 Redis 缓存策略和设计模式。

🚀 核心数据结构

1. String:最基础的类型

SET user:1001 "{'name': 'John', 'age': 25}"
GET user:1001
INCR page:views                    # 计数器
SETEX session:abc123 3600 "data"  # 设置过期时间

2. Hash:对象存储

HSET user:1001 name "John" age 25
HGET user:1001 name
HGETALL user:1001

3. List:消息队列

LPUSH tasks "task1"
RPUSH tasks "task2"
LPOP tasks          # 阻塞版本:BLPOP

4. Set:标签、共同好友

SADD user:1001:tags "redis" "database"
SINTER user:1001:tags user:1002:tags  # 交集

5. Sorted Set:排行榜

ZADD leaderboard 95 "player1"
ZADD leaderboard 87 "player2"
ZREVRANGE leaderboard 0 9  # 前 10 名

🔄 缓存策略

1. Cache-Aside(旁路缓存)

def get_user(user_id):
    # 先查缓存
    user = redis.get(f"user:{user_id}")
    if user:
        return user
    
    # 缓存未命中,查数据库
    user = db.query("SELECT * FROM users WHERE id = ?", user_id)
    
    # 写入缓存
    redis.setex(f"user:{user_id}", 3600, json.dumps(user))
    return user

2. Write-Through(同步写入)

每次写数据库同时写缓存,保证一致性。

3. Write-Behind(异步写入)

先写缓存,异步批量写数据库,提高写入性能。

⚡ 缓存失效策略

  • TTTL(Time To Live):设置过期时间
  • LRU(Least Recently Used):淘汰最久未使用的数据
  • LFU(Least Frequently Used):淘汰使用频率最低的数据
# 配置 maxmemory 策略
maxmemory 2gb
maxmemory-policy allkeys-lru

🔧 实战:分布式锁

import redis
import uuid
import time

def acquire_lock(redis_client, lock_key, timeout=10):
    identifier = str(uuid.uuid4())
    end = time.time() + timeout
    
    while time.time() < end:
        if redis_client.set(lock_key, identifier, nx=True, ex=10):
            return identifier
        time.sleep(0.001)
    
    return False

def release_lock(redis_client, lock_key, identifier):
    # 使用 Lua 脚本保证原子性
    lua_script = """
    if redis.call("get", KEYS[1]) == ARGV[1] then
        return redis.call("del", KEYS[1])
    else
        return 0
    end
    """
    redis_client.eval(lua_script, 1, lock_key, identifier)

📊 性能优化

  1. 使用 Pipeline:批量执行命令,减少网络往返
  2. 使用 Lua 脚本:保证多个命令的原子性
  3. 合理设计 Key:避免大 Key(>10KB)
  4. 避免热 Key:使用本地缓存 + Redis 多级缓存
  5. 启用内存淘汰策略:防止内存溢出

总结:Redis 是高性能应用的核心组件。掌握数据结构、缓存策略、分布式锁等实战技巧,能设计出高效可靠的缓存系统。


本文整理自 Redis 官方文档及缓存实战社区经验

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注