简单理解一下redis分布式锁
redis分布式锁实际上就是在redis中存入一个key,如果这个key存在说明已经被加锁,那么其他线程不能再加锁。当线程执行结束就删除这个key,这样就释放了锁。所以redis分布式锁的实现步骤为:首先使用setIFAbsent()方法来添加key(也可以使用set方法加NX参数),这个方***判断是否已经存在key,若已经存在那么会返回false表示加锁失败;如果线程执行中抛出了异常那么锁就会一直存在,所以要给锁设置一个失效时间,过了一定时间之后会自动删除锁;如果线程执行时间过长,在失效时间结束自动释放锁时,线程还在执行,那么在线程执行结束后会再次释放锁,这时会删除掉别的线程已经添加的锁,所以要给key设置一个随机的线程独有的value值,每次线程结束要释放锁时先判断一下当前的锁的value是否是自己的value,是的话再删除。

以上的解锁操作(先判断是否为自己的value然后删除锁)得是原子操作,所以要用到Lua脚本,Lua脚本能够原子性地执行多条redis命令。
全部评论
我个人觉得redis还是蛮复杂的
点赞 回复 分享
发布于 2022-08-21 14:56 陕西

相关推荐

点赞 评论 收藏
分享
04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务