对于第二种实现方案 , 只需要使用redis的命令setnx、expire、delete就可以了(请允许我再感叹一下 , redis真的太好用了 , 又简单性能又好) , setnxkeyvalue就会给某个变量赋予一个值 , 返回1 , 当业务请求来时 , 如返回key值为1 , 线程获得锁 , 如果key值为0 , 线程抢锁失败 。
对于第三种实现方案 , 我们知道zookeeper是一个分布式协调服务 , 它内部是一个分层的文件系统目录树结构 , 同一个目录下只能有一个唯一文件名 , 因此当实现分布式锁时 , 只需要创建一个目录 , 线程想要获取锁就在目录下创建临时顺序节点 , 然后遍历获取是否存在比自己小的节点 , 如果存在则获取锁失败 , 如果不存在则获取锁成功 , 缺点就是会频繁的创建节点 。
通过本文的介绍 , 认真阅读的小伙伴又获得了分布式架构使用的一个技巧 。在分布式环境中 , 对资源的上锁非常重要 , 通过分布式锁解决了数据的一致性问题 , 小伙伴们可以根据自己业务实际情况选择合适的分布式锁方案噢~
推荐阅读
- SpringBoot初始化几大招式,看了终于明白了
- 彻底搞懂epoll高效运行的原理
- 分布式系统如何寻址
- Spring Cloud微服务分布式物联网平台前后端分离源码
- 聊聊HBase分布式数据库设计那些事
- 串口通信RS232的基本接法,原来这么简单,今天终于弄明白了
- 电影|终于来了!《长津湖之水门桥》4月29日上线视频网站
- 一文搞懂 Traefik2.1 的使用
- SpringBoot如何用Session共享实现分布式部署?
- 几年了,作为一个码农终于把MySQL日记看懂了