Skip to content

Redis

数据类型

类型使用场景
String缓存、计数器、分布式锁
Hash用户信息、对象存储
List消息队列、时间线
Set标签、共同好友
ZSet排行榜、优先队列

持久化

RDB

  • 定时快照
  • save / bgsave
  • 恢复速度快,可能丢失最近数据

AOF

  • 记录每条写命令
  • 三种同步策略:always、everysec、no
  • 数据更安全,文件体积更大

缓存模式

缓存旁路模式

读:  缓存命中 -> 返回 | 缓存未命中 -> 查数据库 -> 写缓存 -> 返回
写:  更新数据库 -> 删除缓存

常见问题

  • 缓存穿透:查询不存在的数据 -> 布隆过滤器
  • 缓存击穿:热点 Key 过期 -> 互斥锁 / 永不过期
  • 缓存雪崩:大量 Key 同时过期 -> 错开过期时间

分布式锁

python
import redis

r = redis.Redis()

def acquire_lock(key: str, value: str, ttl: int = 10) -> bool:
    """获取分布式锁"""
    return r.set(key, value, nx=True, ex=ttl)

def release_lock(key: str, value: str) -> bool:
    """释放分布式锁(Lua 脚本保证原子性)"""
    script = """
    if redis.call('get', KEYS[1]) == ARGV[1] then
        return redis.call('del', KEYS[1])
    end
    return 0
    """
    return r.eval(script, 1, key, value)

基于 VitePress 构建