参考
SpringBoot实现Redis分布式锁
https://www.jianshu.com/p/750ac97eb29e
实现原理
- 加锁解锁
执行逻辑之前,加锁
执行逻辑之后,删除锁
加锁和删除锁必须是同一个对象的行为。
- 获取锁删除锁
使用setnx,保证只有一个对象可以设置锁成功,只有一个对象可以拿到锁。
(删除锁的时候,必须保证是自己创建的锁,需要验证value。
上面参考文章中,每次设置加锁的时候,设置token,删除锁的时候,对比token)
- 设置过期时间
设置锁的过期时间,为什么有删除锁的操作后,还需要设置过期时间?
因为一旦异常,锁没有删除成功,后面的对象操作就再也获取不了锁了,就是出现死锁。
(我觉得是不是可以通过每次设置不同的key,来解决问题)
当然,过期时间设置成多大,又是问题。你的业务得处理多长时间。
但是,好像如果在你的业务执行完之前,删除你的锁也没有多大的影响。
实现 待续
文章收藏
redis(五)-缓存三大问题及解决方案
https://blog.csdn.net/haoxin963/article/details/83245113
原文地址:https://www.cnblogs.com/windy13/p/12637879.html
时间: 2024-10-10 18:03:36