前提:分布式请求分发在多个服务器上,利用redis进行分布式锁
setnx请求
设置过期时间,以及锁的值是uuid,
执行完成之后删除锁
但是问题是如果调用过程中出现卡顿,锁失效
因此如果没有执行结束就给锁续命
Redission框架的lock与unlock,底层lua脚本
问题:当redis存在主从架构,加锁成功,执行逻辑
此时redis挂掉,信息没有同步给集群,线程二访问到了新的主机,
此时显示没有加锁
又进行了操作,那么出现问题
zookeeper集群与redis区别(cap原则)
redis ap 可用性
zookeeper cp一致性
(当超过半数节点获取到同步消息时才返回信息)
红锁 redlock,超过半数节点加锁(牺牲了性能问题)


zookeeper
临时节点与watch功能



在分布式环境中,利用Redis实现锁时,可能出现因请求卡顿导致锁过期失效的问题。为解决此问题,可以使用Redission框架的lock和unlock配合lua脚本确保锁的续命。然而,当Redis主从架构中主节点故障,未同步的数据可能导致锁的安全性降低。对比Zookeeper,Redis更注重可用性(AP),而Zookeeper保证一致性(CP)。为提高安全性,可以考虑使用Redlock(红锁)策略,但会牺牲部分性能。此外,Zookeeper的临时节点和watch功能也能提供锁的可靠性。
2082

被折叠的 条评论
为什么被折叠?



