不要用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); } }
标签:实现,redis,value,public,second,jedis,key,简单,lockKey From: https://www.cnblogs.com/acm-bingzi/p/redis_lock.html