加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

为什么Redis锁比基于etcd的分布式锁要安全的原因

发布时间:2022-10-24 23:30:58 所属栏目:安全 来源:互联网
导读: Redis实现的分布式锁
# 对资源key加锁,key不存在时创建,并且设置,10秒自动过期
SET key value EX 10 NX
# 删除key
DEL key
NX的作用
NX参数是为了保证当分布式锁不存在时分布式系统安全,

Redis实现的分布式锁

 # 对资源key加锁,key不存在时创建,并且设置,10秒自动过期
SET key value EX 10 NX
# 删除key
DEL key 

NX的作用

NX参数是为了保证当分布式锁不存在时分布式系统安全,只有一个client能写入次key成功,获取到锁。

分布式锁的第一核心要素就是互斥性、安全性,在同一时间内,不允许多个client同时获得锁

未设置key的自动过期时间

分布式锁的第二个核心要素,活性。在实现分布式锁的过程中要考虑到client可能会出现crash或者网络分区,需要原子申请分布式锁以及设置锁的自动过期时间,

通过过期、超时等机智自动释放锁,避免死锁,导致业务中断。

设置过期时间,仍然出现超卖

Redis分布式锁的是实现是阻塞的请求执行完成后,不能保证原子性操作,可以通过lua脚本来实现redis比较库存、扣件库存操作的原子性。

为什么喜欢用redis做分布式锁

Redis的核心优点是快、简单、部署方便。、

Redis分布式锁的问题

分布式锁创建的方案

Zookeeper是一个典型的分布式元数据存储服务,它的分布式锁实现基于Zookeeper的临时节点和顺序特性。

临时节点具备数据自动删除的功能,当client和Zookeeper连接和session断掉时,相应的临时节点就会被删除。

Zookeeper也提供了Watch特性可监听key的数据变化。

etcd分布式锁实现

事务与锁的安全性

etcd的事务特性有IF语句、ELSE语句、THEN语句组成,IF语句支持比较key的是修改版本号mod_version和创建版本号create_version.

可以通过key的创建版本号create_version来检查key是否存在,如果不存在,create_revision的版本号是0。

Lease与锁的活性

Lease是一种活性检测机制,提供了检测各个客户端存活的能力。

通过Lease机制就可以优雅地解决了client出现crash故障、client与etcd集群网络出现隔离等各类故障场景下的死锁问题,超过Lease TTL,就会自动释放。

Watch与锁的可用性

watch提供高效的数据监听能力,当client收到watch delete事件后,就可以快速判断自己是否有资格获取锁,极大减少了锁的不可用时间。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!