Redis分布式锁一种新的实现方式

本文介绍了一种使用Redis的list数据结构实现分布式锁的新方法。该方法借鉴了Zookeeper的锁机制,通过在list中插入UUID并监听头部节点,实现锁的获取与释放,同时可通过list长度限制最大连接数。

关于分布式锁,网上资料大概有以下几种方式:
1 基于数据库的分布式锁.主要方式是加锁后,数据库中插入一条记录,释放锁后,把记录删掉.
2 基于Zookeeper的分布式锁.

3 基于redis的分布式锁,一种方式是基于SETNX,SETEX,GET,DEL四个命令;另一种方式是利用RedLock算法实现;

以上几种分布式锁各有优缺点,现在笔者的方法是在不存在Zookeeper的环境下,借鉴Zookeeper锁的优点,利用redis实现分布式锁的一种新的方式.详见下述内容:
本方法利用redis中的list实现分布式锁,
步骤如下:
1 定义一个lockList
2 任务执行时,在lockList右侧插入一个随机生成的自己的UUID,即rpush lockList UUID,然后通过命令lrange lockList 0检测list的第一个节点UUID,确认是不是自己,如果是第一个节点,获得锁;如果不是,则监听第一个节点,直到获取锁.
3 任务执行完后,将自己的节点UUID从list头节点中删除,即执行命令lpop lockList.

此方法还有一个好处是可以通过list的长度来限定最大连接数.

应用场景1 :大型订票,购物系统,在高并发情况下,如果系统性能只能支持最多10万个并发,那么就将链表的最大长度设为小于10万,这样就能防止系统瘫痪.如当年大型订票网站,如果这样设计,就不会造成系统瘫痪.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值