可靠性
首先,想要保证分布式锁能够使用,下面这四个条件是必需要知足的:
1. 互斥性。在任意时刻,只有一个客户端能持有锁。
2. 不会发生死锁。即便有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其余客户端能加锁。
3. 具备容错性。只要大部分的Redis节点正常运行,客户端就能够加锁和解锁。
4. 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端本身不能把别人加的锁给解了。java
加锁、解锁代码redis
public void sync(String lockKey) { boolean check = false; try { check = redisTemplate.opsForValue().setIfAbsent(lockKey, true); if(check){ log.info("处理业务……"); } } catch (Exception exception) { log.error(ToolsUtil.getStackMessage(exception)); } finally { if(check){ redisTemplate.delete(lockKey); } } }
第一步,设置一个变量check,标记加锁标识。
第二步,咱们尝试用lockKey做为Redis的Key进行上锁动做,由于Key是惟一的,若是返回true则加锁成功,若是返回false则表明加锁失败。
第三步,判断变量check是否为true,若是为true表明lockKey被上锁而且是咱们本身上锁,进行业务操做。
第四步,判断变量check是否为true,若是为true表明lockKey被上锁而且是咱们本身上锁,则进行解锁。分布式