当前位置:网站首页>Laravel 实现redis分布式锁
Laravel 实现redis分布式锁
2022-08-04 23:06:00 【陈卿诺语】
Redis几种架构
Redis发展到现在,几种常见的部署架构有:
单机模式;
主从模式;
哨兵模式;
集群模式;
从分布式锁的角度来说, 无论是单机模式、主从模式、哨兵模式、集群模式,其原理都是类同的。 只是主从模式、哨兵模式、集群模式的更加的高可用、或者更加高并发。
所以,接下来先基于单机模式,基于Jedis手工造轮子实现自己的分布式锁。
首先看两个命令:
Redis分布式锁机制,主要借助setnx和expire两个命令完成。
setnx命令:
SETNX 是SET if Not eXists的简写。将 key 的值设为 value,当且仅当 key 不存在; 若给定的 key 已经存在,则 SETNX 不做任何动作。
下面为客户端使用示例:
127.0.0.1:6379> set lock "unlock"
OK
127.0.0.1:6379> setnx lock "unlock"
(integer) 0
127.0.0.1:6379> setnx lock "lock"
(integer) 0
127.0.0.1:6379> expire命令:
expire命令为 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 其格式为:
EXPIRE key seconds
下面为客户端使用示例:
127.0.0.1:6379> expire lock 10
(integer) 1
127.0.0.1:6379> ttl lock
8 $lock = Redis::setnx('cqny',5,1);
if(!$lock) return $this->apiError('操作太频繁了');
Redis::expire('cqny',10); $block = Cache::lock("GoodLock",10); //返回一个redis对象
if ($block){
// Todo 业务逻辑
sleep(10);
echo "业务逻辑<br>";
$block->release(); // 释放锁
return "秒杀成功";
}
return 12;
$suo = Redis::set('123',123,"nx","ex",5);
if ($suo) Redis::del('123');
边栏推荐
- Nacos配置中心之客户端长轮询
- 年薪50W+的测试工程师都在用这个:Jmeter 脚本开发之——扩展函数
- 地面高度检测/平面提取与检测(Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Clu)
- 【3D建模制作技巧分享】ZBrush模型如何添加不同材质
- I was rejected by the leader for a salary increase, and my anger rose by 9.5K after switching jobs. This is my mental journey
- 轮播图动态渲染
- 论文解读(PPNP)《Predict then Propagate: Graph Neural Networks meet Personalized PageRank》
- MySQL基础篇【聚合函数】
- typeScript-部分应用函数
- Redisson
猜你喜欢

Redis understanding

【游戏建模模型制作全流程】在ZBrush中雕刻恶魔城男性角色模型

社区分享|腾讯海外游戏基于JumpServer构建游戏安全运营能力

Will we still need browsers in the future?(feat. Maple words Maple language)

the warmest home

为何越来越多人选择进入软件测试行业?深度剖析软件测试的优势...

2022年全网最全接口自动化测试框架搭建,没有之一

I was rejected by the leader for a salary increase, and my anger rose by 9.5K after switching jobs. This is my mental journey

【3D建模制作技巧分享】ZBrush模型如何添加不同材质

PID Controller Improvement Notes No. 7: Improve the anti-overshoot setting of the PID controller
随机推荐
One trick to cure pycharm DEBUG error UnicodeDecodeError: 'utf-8' codec can't decode
PHP(3)
Implementing class target method exception using proxy object execution
Service Mesh landing path
【转载】kill掉垃圾进程(在资源管理器占用的情况下)
MySQL基础篇【聚合函数】
Shell编程之循环语句与函数的使用
Shell expect real cases
2022/8/4 树上差分+线段树
407. 接雨水 II
App测试和Web测试的区别
PID Controller Improvement Notes No. 7: Improve the anti-overshoot setting of the PID controller
一点点读懂thermal(一)
养殖虚拟仿真软件提供高沉浸式的虚拟场景互动操作体验学习
【无标题】
Latex fast insert author ORCID
good luck
I was rejected by the leader for a salary increase, and my anger rose by 9.5K after switching jobs. This is my mental journey
[QNX Hypervisor 2.2用户手册]10.4 vdev hpet
PID控制器改进笔记之七:改进PID控制器之防超调设定