加鎖
//uuid標識鎖,防止刪除其他線程的鎖 String uuid = UUID.randomUUID().toString(); redisTemplate.opsForValue().setIfAbsent("lock",uuid,2, TimeUnit.SECONDS);
釋放鎖
//lua腳本,保證刪除的原子性 String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end"; // 設置lua腳本返回的數據類型 DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>(); // 設置lua腳本返回類型為Long redisScript.setResultType(Long.class); redisScript.setScriptText(script); redisTemplate.execute(redisScript, Arrays.asList("lock"),uuid);