为什么需要分布式锁?分布式锁服务的特点有哪些?分布式锁设计的重点有哪些?

打卡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分布式锁服务互斥
  • 非阻塞
  • 可重入

左耳朵耗子带你重学《左耳听风》

https://time.geekbang.org/column/article/5175