redis锁简单实现
不要用get,get的话有可能并发
使用 setnx ex
NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
Boolean flag = jedisTemplate.setnxex(REDIS_LOCK_KEY, "1", 60);
if (!flag) {
// 此时其他的服务器正在执行该任务
return;
}
也可以使用如下代码封装一下:
import redis.clients.jedis.Jedis;
public class RedisLock {
private final Jedis jedis;
private final String lockKey;
private final int expireTime = 60; // 锁的过期时间,单位:秒
public RedisLock(Jedis jedis, String lockKey) {
this.jedis = jedis;
this.lockKey = lockKey;
}
/**
* 尝试获取锁
* @return true-获取锁成功,false-获取锁失败
*/
public boolean tryLock() {
String result = jedis.set(lockKey, "lock_value", "NX", "EX", expireTime);
return result != null && result.equals("OK");
}
/**
* 释放锁
*/
public void unlock() {
jedis.del(lockKey);
}
}
把每一件简单的事情做好,就是不简单;把每一件平凡的事情做好,就是不平凡!相信自己,创造奇迹~~