八股

为什么采用redis分布式锁,不用java本地锁
在分布式系统,跨服务器跨进程时,java本地锁只能保证单台服务器,单个jvm进程的线程安全,无法跨多台服务器。redis分布式锁可以实现全局互斥,保障同一时间只有一个实例执行操作。
缺点:
可靠性问题。当主从节点,主节点如果未同步到从节点就宕机,锁就会消失。(部署多个独立redis节点(非主从节点),同时向多个节点申请加锁,超过半数节点成功则加锁成功)
锁超时问题:当业务执行时间超过了锁的过期时间,锁过期后其他线程就会获得锁,导致混乱(使用看门狗自动续期,同时设置业务超时兜底,当超过规定最大执行时间则主动释放并回滚)
误删锁:客户端删锁时,可能因为超时等原因误删其他客户端的锁(增加唯一标识+lua脚本,使用lua脚本原子性执行验证锁值是否匹配+释放锁操作)
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-23 16:31
点赞 评论 收藏
分享
酷酷我灵儿帅:这去不去和线不线下面说实话没啥关系
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务