redis分布式锁,java代码实现
时间: 2024-05-09 10:12:50 浏览: 129
Redis分布式锁是一种基于Redis实现的分布式锁机制,它主要通过Redis的原子性操作和高性能实现了分布式锁的功能。Redis分布式锁有两种实现方式:SETNX+EXPIRE和RedLock。其中,SETNX+EXPIRE是最简单、最常用的实现方式。
以下是Java代码实现SETNX+EXPIRE方式的Redis分布式锁:
```
public class RedisDistributedLock {
private final JedisPool jedisPool;
public RedisDistributedLock(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
public boolean lock(String key, String value, int expireTime) {
Jedis jedis = jedisPool.getResource();
try {
// SETNX命令,如果key不存在则设置key的值为value,返回1,否则返回0
Long result = jedis.setnx(key, value);
if (result == 1) {
// EXPIRE命令,设置key的过期时间
jedis.expire(key, expireTime);
return true;
}
} finally {
jedis.close();
}
return false;
}
public boolean unlock(String key, String value) {
Jedis jedis = jedisPool.getResource();
try {
// Lua脚本,保证原子性操作
String script = "if redis.call('get', KEYS) == ARGV then " +
"return redis.call('del', KEYS) else return 0 end";
Object result = jedis.eval(script, Collections.singletonList(key), Collections.singletonList(value));
if (Long.valueOf(1).equals(result)) {
return true;
}
} finally {
jedis.close();
}
return false;
}
}
```
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)