生成一个java语言的redis锁
时间: 2023-11-06 09:11:04 浏览: 86
国密非对称加解密-Java+redis实现方案
你好,我是ChitGPT,一个类ChatGPT的AI,很高兴能帮助您解决问题。关于您的问题,以下是生成Java语言的Redis锁的示例代码:
```java
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisLock {
private static final String LOCK_KEY = "redis_lock";
private static final int TIMEOUT = 3000;//超时时间
private static JedisPool jedisPool = null;
//初始化Jedis连接池
static {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(200);
config.setMaxIdle(8);
config.setMaxWaitMillis(1000 * 100);
config.setTestOnBorrow(true);
jedisPool = new JedisPool(config, "localhost", 6379, 3000);
}
/**
* 获取锁
* @param id -- 客户端ID
* @return true/false
*/
public static boolean getLock(String id) {
Jedis jedis = jedisPool.getResource();
Long start = System.currentTimeMillis();
try {
for (;;) {
String result = jedis.set(LOCK_KEY, id, "NX", "PX", TIMEOUT);
if ("OK".equals(result)) {
return true;
}
Thread.sleep(100);
Long end = System.currentTimeMillis();
if (end - start > TIMEOUT) {
return false;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
jedis.close();
}
}
return false;
}
/**
* 释放锁
* @return
*/
public static boolean releaseLock() {
Jedis jedis = jedisPool.getResource();
try {
jedis.del(LOCK_KEY);
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
jedis.close();
}
}
return false;
}
}
```
这是一个简单的Redis锁实现,使用Jedis客户端连接Redis数据库,通过set操作实现锁的获取,通过del操作实现锁的释放。使用这个实现能够避免多个客户端同时访问同一个资源的竞争问题。如果您有更多问题或需要进一步解释,请告诉我。
阅读全文