Skip to content

Redis 数据结构、缓存与锁实践 ​

此页的token比较释放只避免删除别人的租约;租约到期不保证旧持有者停止,不能作为通用分布式锁保证。Cache-aside允许并发旧值,现行原子性与缓存边界及完整限额CLI补充可运行验证。

从来源文档中剥离的技术说明。示例与约束沿用原文,使用前按实际环境核对。

数据结构选择 ​

数据结构适用场景示例
String简单值存储、计数器用户信息、访问次数
Hash对象存储用户资料、商品信息
List队列、消息列表任务队列、消息流
Set去重、交集并集关注列表、共同好友
Sorted Set排行榜、范围查询积分排名、热门榜单
Hash结构化数据配置信息、对象属性

分布式锁 ​

锁的实现 ​

SET lock:resource:id random_value NX PX 30000
  • NX: 仅当键不存在时设置
  • PX: 设置过期时间(毫秒)
  • random_value: 唯一标识,用于安全释放

锁的释放 ​

lua
if redis.call("get", KEYS[1]) == ARGV[1] then
    return redis.call("del", KEYS[1])
else
    return 0
end

1. Cache-Aside(旁路缓存) ​

读操作:
1. 先查缓存
2. 缓存命中则返回
3. 缓存未命中则查数据库,写入缓存后返回

写操作:
1. 先写数据库
2. 再删除缓存(而非更新缓存)

适用范围 ​

延伸阅读 ​

数据结构说明见 Redis 数据结构与应用场景,操作语法见 Redis 命令速查。

继续阅读