如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。
Redis实现分布式锁时的问题-
原子性
使用lua脚本
-
没有释放锁
设置lock的过期时间
-
释放别人的锁
为保证只释放自己加的锁,位lockKey设置唯一id, 释放时先判断再释放
-
大量失败的请求
使用自旋,或阻塞一段时间后再次抢锁
-
主从复制问题
redisson框架为了解决这个问题,提供了一个专门的类:RedissonRedLock,使用了Redlock算法
-
可重入
并发遇见并发,抢锁之后判断是否是自己加过的锁
-
锁超时
如果达到超时时间,但业务还未执行完,需要给锁续期
-
效率问题
使用更细粒度的锁:读写锁
锁分段
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)