当前位置:网站首页>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');
边栏推荐
- 七牛云图片上传
- 亿流量大考(3):不加机器,如何抗住每天百亿级高并发流量?
- Using ngrok to optimize web pages on raspberry pi (2)
- One trick to cure pycharm DEBUG error UnicodeDecodeError: 'utf-8' codec can't decode
- The Record of Reminding myself
- The Controller layer code is written like this, concise and elegant!
- The market value of 360 has evaporated by 390 billion in four years. Can government and enterprise security save lives?
- 容联云发送短信验证码
- go语言的日志实现(打印日志、日志写入文件、日志切割)
- 【3D建模制作技巧分享】ZBrush模型如何添加不同材质
猜你喜欢

PID Controller Improvement Notes No. 7: Improve the anti-overshoot setting of the PID controller

被领导拒绝涨薪申请,跳槽后怒涨9.5K,这是我的心路历程

各行各业都受到重创,游戏行业却如火如荼,如何加入游戏模型师职业

【3D建模制作技巧分享】在zbrush中如何雕刻头发 ZBrush头发雕刻小技巧

【游戏建模模型制作全流程】ZBrush蜥蜴模型雕刻教程

Deep Learning RNN Architecture Analysis

FinClip崁入式搭建生态平台,降低合作门槛

一点点读懂Thremal(二)

Latex fast insert author ORCID

智慧养老整体解决方案
随机推荐
3年,从3K涨薪到20k?真是麻雀啄了牛屁股 — 雀食牛逼呀
社区分享|腾讯海外游戏基于JumpServer构建游戏安全运营能力
中国的顶级黑客在国际上是一个什么样的水平?
【3D建模制作技巧分享】在zbrush中如何雕刻头发 ZBrush头发雕刻小技巧
The Record of Reminding myself
good luck
未来我们还需要浏览器吗?(feat. 枫言枫语)
Kernel函数解析之kernel_restart
【3D建模制作技巧分享】ZBrush如何重新拓扑
软件测试技术之如何编写测试用例(4)
加解密在线工具和进制转化在线工具
Pytest学习-Fixture
postman接口测试
生产者消费者问题
一点点读懂cpufreq(一)
3D建模师为了让甲方爸爸过稿,还可以这么做,就是在赚血汗钱啊
temp7777
typeScript-闭包函数的使用
Acwing3593. 统计单词
Redis understanding