redis如何实现分布式锁


redis如何实现分布式锁

分布式锁需要解决的问题

互斥性:任意时刻只能有一个客户端拥有锁,不能同时多个客户端获取

安全性:锁只能被持有该锁的用户删除,而不能被其他用户删除       (推荐学习:Redis视频教程)

死锁:获取锁的客户端因为某些原因而宕机,而未能释放锁,其他客户端无法获取此锁,需要有机制来避免该类问题的发生

容错:当部分节点宕机,客户端仍能获取锁或者释放锁

如何通过Redis实现分布式锁:(非完善方法)

SETNX key value :如果key不存在,则创建并赋值

时间复杂度: 0(1)

返回值:设置成功,返回1;设置失败,返回0。

但是此时我们获取的key是长期有效的,所以我们应该如何解决长期有效的问题呢?

EXPIRE key seconds

设置key的生存时间,当key过期时(生存时间为0) ,会被自动删除

缺点:原子性得不到满足

Metronic Bootstrap后台模板 Metronic Bootstrap后台模板

Metronic是一套精美的响应式后台管理模板,基于强大的Twitter Bootstrap框架实现。Metronic拥有简洁优雅的Metro UI风格界面,自适应屏幕分辨率大小,兼容PC端和手机移动端。全套模板,包含仪表盘、侧边栏菜单、布局宣传片、电子邮件模板、UI特性、按钮、标签、表格布局、表单组件、多文件上传、悬浮窗文件上传、时间表、博客、新闻、关于我们、联系我们、日历、用户配置文件、锁屏、

Metronic Bootstrap后台模板 275 查看详情 Metronic Bootstrap后台模板

下面是伪代码

//该程序存在危险,如果执行到第二行就崩溃了,则此时key会被一直占用而无法被释放
RedisService redisService = SpringUtils.getBean(Redi sService.class); 
long status = redisService.setnx(key, "1");
if(status == 1) {
	redisService.expire(key, expire);
	//执行独占资源逻辑
	doOcuppiedWork();
}

如何通过Redis实现分布式锁:(正确方式)

SET key value [EX seconds] [PX milliseconds] [NX|XX]

EX second :设置键的过期时间为second秒

PX millisecond :设置键的过期时间为millisecond毫秒

NX :只在键不存在时,才对键进行设置操作

XX:只在键已经存在时,才对键进行设置操作

SET操作成功完成时,返回OK ,否则返回nil

下面是伪代码

RedisService redisService = SpringUtils.getBean(RedisService.class); .
String result = redisService.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
if ("OK".equals(result)) {
	//执行独占资源逻辑
	doOcuppiedWork();
}

大量的key同时过期的注意事项

集中过期,由于清除大量的key很耗时,会出现短暂的卡顿现象

解放方案:在设置key的过期时间的时候,给每个key加上随机值

更多Redis相关技术文章,请访问Redis入门教程栏目进行学习!

以上就是redis如何实现分布式锁的详细内容,更多请关注其它相关文章!


# 如何实现  # 客户端  # 时间为  # redis  # 新沂网络营销推广策略  # 网络推广的营销方式有  # 松原seo查询的好方法  # 最新网站建设语言  # 徐州seo优化建站  # seo优化名称是什么  # 有意营销推广意图  # 峄城推广营销策划中心地址  # 营销推广效果评估体系  # 移动网站模板seo  # 多个  # 文件上传  # 网络带宽  # 才对  # 只在  # 死锁  # 不存在 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 抖音作品被限流怎么办 抖音内容优化与流量恢复方法  蛙漫2(台版)正版官网 2025免费网页版分享  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  Linux如何优化系统启动流程_Linux启动项优化方案  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  C++ optional用法详解_C++17处理可能为空的返回值  Composer reinstall命令重装损坏的包  百度网盘网页入口链接分享 百度网盘官网入口网页登录  J*aScript事件处理:优化键盘输入与表单提交的实践指南  VS Code的时间线(Timeline)视图:您的代码时光机  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  阿里旺旺电脑网页版入口 阿里旺旺电脑版网页登录入口  如何取消数字签名  深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  苹果自助维修计划支持哪些设备机型  纯CSS实现自适应宽度与响应式布局的水平按钮组  如何使用 Optional 类型并满足 Pylint 的类型检查  windows10怎么开启wsl_windows10安装linux子系统教程  电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  J*aScript实现网页表单实时输入字段比较与验证教程  126邮箱网页在线登录2025_126邮箱网页版入口官方地址  《健康大兴》注册方法介绍  解决Go encoding/json 将JSON大数字解析为浮点数的问题  美发店速赢秘籍  歌词怎么展示在|直播|间视频号?有什么注意事项?  易车网官网直达入口 易车网在线登录入口  解决VS Code中Python版本冲突与输出异常的指南  Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法  vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  空腹吃苹果好吗 苹果空腹摄入指南  J*aScript 数值去小数位处理:多种方法与实践  Python中对象引用与链表属性赋值的机制解析  CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程  TikTok视频播放中断怎么办 TikTok播放异常修复方法  手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】  wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  《三国:谋定天下》平民全阶段通用阵容  外卖小程序对接第三方配送  微博网页版入口链接 微博网页版在线互动平台  蜻蜓FM如何设置移动流量播放  六级准考证号怎么查_四六级准考证查询入口官网  VS Code快捷键when上下文子句的妙用  第五人格PC版怎么避免被封号_第五人格PC版防封号注意事项  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  PDF文件去水印平台入口 PDF水印删除网址 

 2019-11-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.