来自:https://mp.weixin.qq.com/s/qJK61ew0kCExvXrqb7-RSg
互斥性。在任意时刻,只有一个客户端能持有锁。
不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。
1
2
3
4
5 <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
1 | public static boolean tryGetDistributedLock(Jedis jedis, String lockKey, String requestId, int expireTime) { |
1 | public static boolean releaseDistributedLock(Jedis jedis, String lockKey, String requestId) { //释放锁代码 |
如果你的项目中Redis是多机部署的,那么可以尝试使用Redisson实现分布式锁,这是Redis官方提供的Java组件
https://github.com/redisson/redisson
https://redis.io/commands/eval
https://redis.io/topics/distlock