注意问题
加锁命令和超时时间要同时设置【保证原子性】
value要具有唯一性(可用UUID)【防止误解锁】
使用定时任务定期检查锁的状态【超时续命】<br>每次检查锁还在的话,将锁的超时时间重制
加锁实现
SET key value [EX seconds] [PX milliseconds] [NX|XX]
stringRedisTemplate.opsForValue().setIfAbsent(String key,String value,long timeout,TimeUnit unit)
jedis.set(String key, String value, String nxxx, String expx, long time);<br>
【存在风险】如果是主从架构,主节点加锁后挂了,数据还没同步到从节点,<br>此时slave升级为master,如果再有线程加锁会出现多个客户端持有锁的情况
Redisson
自带锁续命功能(每隔超时时间的1/3检测一次)
基于RedLock算法,解决单节点分布式锁在故障迁移时产生的安全问题