分布式锁的实现

多线程环境下如果不对共享资源进行加锁操作就会出现数据不同步的问题,通常情况下有三种分布式锁的实现,即DB、Redis、zookeeper。

  1. DB可以基于表记录来实现,创建一张锁表,需要获得锁时插入一条数据,释放锁时删除该记录。但是这种锁没有失效时间,会出现单点问题,而且是非可重入。也可以使用select for update实现排他锁,由于InnoDB 预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL 才会执行行锁 ,否则MySQL 将会执行表锁。
  2. Redis加锁,就是给key键设置一个值,并定一个过期时间,解锁就是把该键删除。当然也可以直接使用Redisson提高多线程高并发处理能力。
  3. zookeeper创建临时序列节点来实现分布式锁,适用于顺序执行的程序,大体思路就是创建临时序列节点,找出最小的序列节点,获取分布式锁,程序执行完成之后此序列节点消失,通过watch来监控节点的变化,从剩下的节点的找到最小的序列节点,重复以上操作。
全部评论

相关推荐

哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
06-12 16:00
天津大学 Java
牛客30236098...:腾讯坏事做尽,终面挂是最破防的 上次被挂了后我连简历都不刷了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务