④. 问题总结
问题总结,推出使用分布式锁
(1). synchronized单机版OK,上分布式
(2). nginx分布式微服务,单机锁不行
(3). 取消单机锁,上redis分布式锁setnx
(4). 只加了锁,没有释放锁,出异常的话,可能无法释放锁,必须要在代码层面finally释放锁
(5). 宕机了,部署了微服务代码层面根本没有走到finally这块,没办法保证解锁,这个key没有被删除,需要有lockKey的过期时间设定
(6). 为redis的分布式锁key,增加过期时间此外,还必须要setnx+过期时间必须同一行
(7). 必须规定只能自己删除自己的锁,你不能把别人的锁删除了,防止张冠李戴,1删2,2删3
(8). redis集群环境下,我们自己写的也不OK,直接上RedLock之Redisson落地实现
⑤. Redis单机CP、集群AP、EurekaAP、Zookeeper集群CP
- ①. Redis单机是CP集群是AP
- ②. Redis集群:AP
(redis异步复制造成的锁丢失,比如:主节点没来的及把刚刚set进来这条数据给从节点,master就挂了,从机上位但从机上无该数据)
- ③. Zookeeper集群的CP
④. Eureka是AP