返回
Redis 分布式锁与缓存实践
百科(权威知识源 · 考试范围)
Redis 分布式锁与缓存实践
分布式环境下,多实例无法用本地锁,可借助 Redis 实现分布式锁。
分布式锁实现
用 Redis 的 SET key value NX EX 原子地加锁:
NX:键不存在时才设置(保证只有一个客户端拿到锁)。EX:设置过期时间,避免死锁(客户端崩溃后锁自动释放)。
SET lock:order 客户端唯一值 NX EX 30
释放锁要保证只释放自己的锁:
- value 用唯一标识(如 UUID)。
- 释放时先用 Lua 脚本(get 比对后再 del)保证原子性,避免误删他人锁。
-- Lua 脚本:比对后再删除,原子
if redis.call('get', KEYS[1]) == ARGV[1] then
return redis.call('del', KEYS[1])
else
return 0
end
Redisson 封装了可重入锁、看门狗自动续期(业务未完成时自动延长锁过期),使用更简单。
缓存一致性(Cache Aside)
更新数据时常见的 Cache Aside 模式:
读:先查缓存,未命中再查数据库并写缓存
写:先更新数据库,再删除缓存(下次读回填)
删除缓存(而非更新缓存)可减少并发写导致的脏数据。延迟双删进一步降低不一致窗口。
缓存淘汰策略
Redis 内存超出 maxmemory 时的淘汰策略:
noeviction:拒绝写入。allkeys-lru:从所有 key 逐出最近最少使用。volatile-lru:从设置了过期的 key 中逐出 LRU。
缓存三大问题回顾
- 穿透(不存在 key)、击穿(热点失效)、雪崩(大量失效)——分别用布隆过滤器/空值、互斥锁、随机过期时间与集群防护。
总结
- 分布式锁:SET NX EX + Lua 安全释放;Redisson 简化并内置续期。
- Cache Aside 先更新 DB 再删缓存。
- 合理设置过期与淘汰策略,注意穿透/击穿/雪崩防护。
考试信息
通过标准满分(错一道即与满分无缘,可把整卷答完看解析;重考不限次数)
时间限制不限时
单卷抽题数10 题
成绩窗口2026-09-14 ~ 2026-09-20
积分学费20 积分
支付方式满分后用积分支付(自主决定)
用积分支付:成绩长期保留,参与排名,积分学费含平台资助池;不支付:成绩保留至窗口截止后清空
积分无充值通道;积分不足 10 时,平台自动发放 100 积分。积分不可提现、不可转让、无现金价值。
排行榜(窗口期最短满分用时 · 前 0 名)
当前窗口(2026-09-14 ~ 2026-09-20)
该窗口暂无满分记录
课程(免费学习 · 共 0 门)
暂无课程
登录后可查看我的出题、测试记录并参加满分考试