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

点赞 评论 收藏
分享

点赞 评论 收藏
分享