当前位置:网站首页>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');
边栏推荐
猜你喜欢
Community Sharing|Tencent Overseas Games builds game security operation capabilities based on JumpServer
Reconfigure the ffmpeg plugin in chrome
社区分享|腾讯海外游戏基于JumpServer构建游戏安全运营能力
Shell编程之循环语句与函数的使用
赶紧进来!!!教你C语言实现扫雷小游戏(文章最后有源码!!!)
Latex fast insert author ORCID
【3D建模制作技巧分享】ZBrush模型制作流程:地精
仪表板展示 | DataEase看中国:数据呈现中国资本市场
直接插入排序
【字符串函数内功修炼】strcpy + strcat + strcmp(一)
随机推荐
测试技术:关于上下文驱动测试的总结
【3D建模制作技巧分享】ZBrush模型如何添加不同材质
MySQL增删改查基础
Service Mesh landing path
【无标题】
web3.js
【云原生 · Kubernetes】Kubernetes运维
Controller层代码这么写,简洁又优雅!
【3D建模制作技巧分享】在zbrush中如何雕刻头发 ZBrush头发雕刻小技巧
Shell expect 实战案例
基于内容的图像检索系统设计与实现--颜色信息--纹理信息--形状信息--PHASH--SHFT特征点的综合检测项目,包含简易版与完整版的源码及数据!
Service Mesh落地路径
go语言的time包介绍
360市值四年蒸发3900亿,政企安全能救命吗?
SSM整合完整流程讲解
Qt中的常用控件
[Mock Interview - 10 Years of Work] Are more projects an advantage?
从“草原牛”到“数字牛”:蒙牛的数字化转型之道
堪称奔驰“理财产品”,空间媲美宝马X5,采用了非常运动的外观
轮播图动态渲染