Redis加鎖和釋放鎖


加鎖

//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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM