springboot+redis实现分布式锁
Posted 我的名字是Sheldon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot+redis实现分布式锁相关的知识,希望对你有一定的参考价值。
参考
SpringBoot实现Redis分布式锁
https://www.jianshu.com/p/750ac97eb29e
实现原理
- 加锁解锁
执行逻辑之前,加锁
执行逻辑之后,删除锁
加锁和删除锁必须是同一个对象的行为。
- 获取锁删除锁
使用setnx,保证只有一个对象可以设置锁成功,只有一个对象可以拿到锁。
(删除锁的时候,必须保证是自己创建的锁,需要验证value。
上面参考文章中,每次设置加锁的时候,设置token,删除锁的时候,对比token)
- 设置过期时间
设置锁的过期时间,为什么有删除锁的操作后,还需要设置过期时间?
因为一旦异常,锁没有删除成功,后面的对象操作就再也获取不了锁了,就是出现死锁。
(我觉得是不是可以通过每次设置不同的key,来解决问题)
当然,过期时间设置成多大,又是问题。你的业务得处理多长时间。
但是,好像如果在你的业务执行完之前,删除你的锁也没有多大的影响。
实现 待续
文章收藏
redis(五)-缓存三大问题及解决方案
https://blog.csdn.net/haoxin963/article/details/83245113
以上是关于springboot+redis实现分布式锁的主要内容,如果未能解决你的问题,请参考以下文章
Redis 系列 -- SpringBoot中 基于 Redis 实现分布式锁
Springboot使用redis的setnx和getset实现并发锁、分布式锁