如何通过 Redis 实现分布式锁
分布式锁需要解决的问题:
- 互斥性:任意时刻只能有一个客户端获取锁
- 安全性:锁只能被持有该锁的客户端删除
- 死锁:获取锁的客户端因为意外宕机未能释放锁,其他客户端再也无法获取到该锁导致死锁
- 容错:宕机后客户端仍然可以获取、释放锁
SETNX key value:如果 key 不存在,即创建并赋值;
时间复杂度O(1);
返回值设置:设置成功返回1,设置失败返回0;
如何解决 SETNX 长期有效的问题?
EXPIRE key seconds
设置 key 的生存时间,当 key 过期时(生存时间为0),会被自动删除
RedisService redisService = SpringUtils.getBean(RedisService.class);long status = redisService.setnx(key,"1");if(status == 1){redisService.expire(key,expire);//执行独占资源逻辑 do0cuppiedWork(); }
缺点:原子性得不到满足
SET key value [EX seconds] [PX milliseconds] [NX|XX]
-EX seconds:设置键的过期时间为 second 秒
-PX milliseconds:设置键的过期时间为 milliseconds 毫秒
-NX:只在键不存在时,才对键进行设置操作
-XX:只在键已经存在时,才对键进行设置操作
-SET操作完成时,返回OK,否则返回nil
大量的 key 同时过期的注意事项
-集中过期,由于清除大量的 key 很耗时,会出现短暂的卡顿现象
-解决方案:在设置 key 的过期时间的时候,给每个 key 加上随机值
转载于:https://www.cnblogs.com/Roni-i/p/10796371.html
如何通过 Redis 实现分布式锁相关推荐
- 基于 Redis 实现分布式锁思考
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/xuan_lu/article/details/111600302 分布式锁 基于redis实 ...
- Redis实现分布式锁的深入探究
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.分布式锁简介 锁 是一种用来解决多个执行线程 访问共享资源 错 ...
- nx set 怎么实现的原子性_基于Redis的分布式锁实现
前言 本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结 分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问 ...
- Zookeeper和Redis实现分布式锁,附我的可靠性分析
作者:今天你敲代码了吗 链接:https://www.jianshu.com/p/b6953745e341 在分布式系统中,为保证同一时间只有一个客户端可以对共享资源进行操作,需要对共享资源加锁来实现 ...
- Redis——由分布式锁造成的重大事故
作者:浪漫先生 原文:juejin.im/post/6854573212831842311 前言 基于Redis使用分布式锁在当今已经不是什么新鲜事了.本篇文章主要是基于我们实际项目中因为redis分 ...
- 基于Redis的分布式锁和Redlock算法
来自:后端技术指南针 1 前言 今天开始来和大家一起学习一下Redis实际应用篇,会写几个Redis的常见应用. 在我看来Redis最为典型的应用就是作为分布式缓存系统,其他的一些应用本质上并不是杀手 ...
- 《Redis官方文档》用Redis构建分布式锁
<Redis官方文档>用Redis构建分布式锁 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现 ...
- 《Redis官方文档》用Redis构建分布式锁(悲观锁)
2019独角兽企业重金招聘Python工程师标准>>> **用Redis构建分布式锁 ** 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章 ...
- redis 实现分布式锁
为什么80%的码农都做不了架构师?>>> redis 实现分布式锁 伪代码 lock(){if(jedis.setNx("key",timestamp)){ ...
- redis系列:基于redis的分布式锁
一.介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分为两部分,一个是单机环境, ...
最新文章
- OpenCV(二十)模板匹配
- 如何优化网站结构才促使网站排名“节节高”?
- webpack vue app.js自动注入页面.为app.js增加随机参数
- Mckinsey insights 2
- 【收藏】Kubernetes(十七) 基于NFS的动态存储申请
- 单片机c语言 openssl,Linux下C语言使用openssl库进行加密
- L3-2 还原文件 (30 分)
- Modelsim-altera 仿真 顶层原理图的解决办法
- RHEL6配置yum源为网易镜像
- matlab获取图片上的字,Matlab读取图片代码
- XP系统计算机桌面图标不见,xp系统桌面图标不显示的详细方法
- WPF流程图制作系列相关基础一
- Python之禅 的翻译和解释
- 字体图标 fa fa html5,前端引入icon的方法(iconfont,fontawesome)
- 软件架构---微核架构
- python颜色填充代码_python中如何给图形填充颜色
- 计算机windows7连接打印机
- 如何用Matlab画一个数学动态GIF
- tableau复合图形示例:三张图形描述一张成绩单
- C# 操作 Excel 单元格格式设置
热门文章
- 内置函数的数据聚合NumpyPandas
- 论文计算机在管理会计中的应用,浅论管理会计在企业中的应用
- 谷粒商城doc文档_谷粒学院项目分享全栈开发入门必备(资料齐全)
- 计算机网络ip地址博客,计算机网络中,这些IP地址你知道吗?
- 微型计算机主要特点,微型计算机数字控制的主要特点.ppt
- 怎样开图纸便宜_在县城开一家儿童乐园怎么样?开多大面积合适?投资需要多少钱?...
- 正则匹配图片地址 php,php正则匹配图片地址
- matlab中x.^2与x^2有什么区别?
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例详细介绍(转载)
- 杨晓峰-Java核心技术-9 HashMap Hashtable TreeMap MD