分布式锁
2021-08-09 10:31:14 41 举报
AI智能生成
分布式锁几种方式
作者其他创作
大纲/内容
保证在分布式系统中,同一方法在同一时刻只可被一台机器的一个线程执行
应该为可重入锁,避免产生死锁
高可用的获取和释放锁
获取和释放锁性能要好
分布式锁思考
京东618 iPhone12手机秒杀
场景举例
任意时刻,只能一个线程持有锁
互斥性
锁超时了,可释放,防止资源浪费及死锁
锁超时释放
同一个线程可重复获取当前持有的锁
可重入性
加锁和解锁开销尽可能低,且保证高可用,避免分布式锁失效
高可用、高性能
锁只能被持有的线程删除,不能被其他线程删除
安全性
分布式锁特征
CAS(compare and swap)
版本号机制
乐观锁
for update
悲观锁
两种方式
悲观锁简单易用、保障数据一致性,但并发量较大时,导致请求排队,影响数据库稳定,消耗服务器性能
乐观锁主要基于系统数据存储逻辑上,可能存在一些局限性,例:并发场景中直接更改了共享数据属性,导致脏数据
总结
基于数据库方案
setnx+expire
setnx+value(随机值/系统时间)+expire
阻塞式等待,默认加锁时间为30s(看门狗默认时间)
自动续期
解锁时间要大于业务执行时间
加锁
写锁(排它锁)
读锁(共享锁)
读写锁
acquire()
release()
tryAcquire()
信号量
redisson
基于缓存方案(Redis)
基于Zookeeper方案
缓存不存在时,设置null值,并设置过期时间
缓存穿透
缓存击穿
缓存雪崩
緩存失效问题
双写模式
失效模式
缓存数据一致性
分布式锁使用
0 条评论
回复 删除
下一页