为什么需要分布式锁?分布式锁服务的特点有哪些?分布式锁设计的重点有哪些?
打卡Day23:今天学习了《52|管理设计篇之“分布式锁”》,我的收获如下:
为什么需要分布式锁
互斥对共享资源的访问。
分布式锁服务的特点
- 安全性(互斥性)
- 避免死锁
- 容错性(高可用)
Redis的分布式锁
SET resource_name my_random_value NX PX 30000。
分布式锁服务的一个问题
Redis超时释放锁可能会引发多Client更新数据出错。
引入fence栅栏技术(乐观锁)解决,引入版本号。
CAS(Compare And Swap)
源于计算机汇编指令中的原子操作,大量无锁的数据结构都用到了这个。
更新语句写成SQL
UPDATE table_name SET xxx = #{xxx}, version=version+1 where version =#{version};
分布式锁设计的重点
- 锁超时
- CAS更新数据
- Redis分布式锁服务互斥
- 非阻塞
- 可重入