redis分布式锁
原理是通过setnx命令
setnx key value
如果key不存在 则设置value,如果存在则不做操作
jedis
clientId = uuid;
1、stringRedisTemplate.opsForValue.setIfAbsent(lockKey,clientId,30,TimeUnit,SE)
try{
}finally{
2、 if(clientId == stringredis.get(lockKey)){
ringRedisTemplate.delete();
}
}
redisson
RLock redissonLock = redosson.getLock(lockKey)
加锁:redisson.lock();看门狗机制默认锁时间30s
每个10s,会续约时间
使用lua脚本设置(lua脚本具有原子性操作)
解锁:redissonlock.unlock
从库切换主库分布式锁丢失怎么解决?
RedLock方案