返回
Redis 分布式锁与缓存实践
百科(权威知识源 · 考试范围)
作者:管理员最后更新:2026/9/4 12:42:18审核:管理员

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 门)

暂无课程

登录后可查看我的出题、测试记录并参加满分考试