400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

redis分布式锁核心实现-创新互联

redis分布式锁核心实现

创新互联专业IDC数据服务器托管提供商,专业提供成都服务器托管,服务器租用,内蒙古服务器托管内蒙古服务器托管,成都多线服务器托管等服务器托管服务。分布式锁的由来

在我们的日常开发中,一个进程中当多线程的去竞争某一资源的时候,我们通常会用一把锁来保证只有一个线程获取到资源。如加上synchronize关键字或ReentrantLock锁等操作。

那么,如果是多个进程相互竞争一个资源,如何保证资源只会被一个操作者持有呢?

server1、server2、server3 这三个服务都要修改amount这个数据,每个服务更新的值不同,为了保证数据的正确性,三个服务都向lock server服务申请修改权限,最终server2拿到了修改权限,即server2将amount更新为2,其他服务由于没有获取到修改权限则返回更新失败。

特征

在这里插入图片描述

核心实现 单实例

我们这里直接使用Lua脚本来保证原子性,其中
NX :表示key不存在的时候,才能set成功,也即保证只有第一个客户端请求才能获得锁,而其他客户端请求只能等其释放锁,才能获取。
EX seconds :设定key的过期时间,时间单位是秒。
PX milliseconds: 设定key的过期时间,单位为毫秒

加锁

redis.call('set',key,value,'NX','PX',30000)

解锁

redis.call('get',key == value then return tostring(redis.call('del', key)==1) else return 'false' end
Redlock实现 redlock由来

上面琐大的缺点就是它加锁时只作用在一个Redis节点上,即使Redis通过sentinel保证高可用,如果这个master节点由于某些原因发生了主从切换,那么就会出现锁丢失的情况:

例如,在Redis的master节点上拿到了锁,但是这个加锁的key还没有同步到slave节点,此时master故障,发生故障转移,slave节点升级为master节点,导致锁丢失。

正因为如此,Redis作者antirez基于分布式环境下提出了一种更高级的分布式锁的实现方式:Redlock。
其核心思想为:

搞多个Redis master部署,以保证它们不会同时宕掉。并且这些master节点是完全相互独立的,相互之间不存在数据同步。同时,需要确保在这多个master实例上,是与在Redis单实例,使用相同方法来获取和释放锁。

实现步骤源码剖析

参考链接: 一文搞懂 Redis 分布式锁

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:redis分布式锁核心实现-创新互联
文章起源:http://mbwzsj.com/article/gegoi.html

其他资讯

让你的专属顾问为你服务