redis 分布式锁注意事项
- 1.互斥性:在任意时刻,只有一个客户端持有锁
- 2.一致性:加锁和解锁必须在同一个客户端,而且客户端自己不能把别人的锁解了;
- 3.避免死锁:即使有一个客户端在持有锁期间崩溃了而没有主动解锁,也能保证后续其他客户端能加锁
参考代码实现
if(redistemplate.opsForValue().setIfAbsent("getsnInfo","11")){ //key的值放什么不重要,重要的是key.所以11或者aa都行。多个定时任务,是多个key,不能set一样的,各管各的定时任务。懂redis的应该都明白 try{ // 业务代码 }catch(){ redistemplate.delete("getsnInfo"); } redistemplate.delete("getsnInfo"); }
问题分析:
上述代码满足分布式锁的互斥性;
没有避免死锁,假如加锁的客户端挂掉,锁将一直存在,需要给加的锁添加过期时间;
如果保证一致性呢,删除的时候 判断 取出来的值 是否 放进去的值;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。