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