redis分布式锁培训笔记
来源:图灵学院培训笔记
支持单机,不支持集群分布式
jmeter 压测
问题:如果宕机,代码没执行下去,锁没释放
如果宕机发生在设置过期时间的时候,改成原子语句
假设这个线程执行时间耗时了15s,程序执行中途过了10s,key失效,redis将它删除。
这时第二个线程来执行,发现没有锁,于是它加锁成功,第一个线程仍在执行,如果比第一个线程先执行完,执行到最后删除 key,删的则是第二个线程加的锁。
我自己设的锁不想让其他人删掉,设置唯一 id 。
但仍存在问题:线程执行未结束,key已经过期,业务代码还没执行完,其他线程可以执行此段代码,就有可能有bug产生。
锁续命:定时任务定时扫描该线程的锁是否存在,如果还存在就重置过期时间。
redisson
jedis在分布式场景下没redisson功能强大
支持重入锁
如果在主从架构中,key在主节点加锁成功,主节点挂了,而这时候,并没有同步到从节点,其他线程可以在新的主节点加锁,此时可以用zookeeper ,zookeeper是强一致性架构,但zookeeper性能没redis高
redlock
不再对一台机器加锁
性能不高,并涉及回滚问题。
高并发分布式锁
可以用分段锁的思想
001 号商品库存1000个,可以分段加锁,针对不同库存段位加锁。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2019-09-22 代理模式
2019-09-22 序列化
2019-09-22 redis命令