Redis冲冲冲——Redis分布式锁如何实现

在这里插入图片描述

目录

  • 引出
  • Redis分布式锁如何实现
  • Redis入门
    • 1.Redis是什么?
    • 2.Redis里面存Java对象
  • Redis进阶
    • 1.雪崩/ 击穿 / 穿透
    • 2.Redis高可用-主从+哨兵
    • 3.持久化RDB和AOF
    • 4.Redis未授权访问漏洞
    • 5.Redis里面安装BloomFilte
  • Redis的应用
    • 1.验证码
    • 2.Redis高并发抢购
    • 3.缓存预热用户注册+验证码
    • 4.Redis和MySQL数据一致性
    • 5.用户登陆布隆过滤器
  • 总结

引出

Redis冲冲冲——Redis分布式锁如何实现


Redis分布式锁如何实现

当使用Redis实现分布式锁时,可以考虑以下几个方面:

  1. 使用 SETNX 命令:
    • SETNX(SET if Not eXists)是Redis的一个原子性操作,可以在键不存在时设置键的值。
    • 客户端可以使用SETNX命令尝试在Redis中创建一个特定的键作为锁。如果键已存在,则表示锁已被其他客户端持有。
  2. 使用 Redission:
    • Redisson是一个基于Redis的Java库,提供了一套分布式对象和服务,其中包括分布式锁的实现。
    • Redisson提供了RLock对象来实现分布式锁。客户端可以通过调用RLock的lock方法尝试获取锁,如果成功获取到锁,即可执行对应的操作。在操作完成后,客户端需要调用RLock的unlock方法释放锁。
  3. 使用 Redlock:
    • Redlock是Redis官方提出的一种分布式锁算法,用于解决Redis单节点可能出现的故障和并发竞争问题。
    • Redlock通过在多个Redis节点上尝试获取锁,并使用多数节点的原则来确定是否成功获取锁。这样可以提高锁的可用性和安全性。
    • 在使用Redlock算法时,需要在多个Redis节点上执行加锁和解锁操作,确保大部分节点上的加锁和解锁操作成功。

以上是使用Redis实现分布式锁的几个常见方案。使用SETNX命令是简单的方式,但在高并发情况下可能存在问题。Redission是一个优秀的第三方库,提供了丰富的分布式锁功能和选项。Redlock是一种高可用性的分布式锁算法,适用于需要更高级别的可用性保证的场景。具体选择哪种方案取决于应用的需求和环境。

在Redisson中,实现锁的续期是通过以下方式进行的:

  1. 加锁时:
    • 当客户端通过Redisson的RLock对象的lock方法获取锁时,会在Redis服务器上创建一个对应的锁实体,并设置锁的过期时间。
    • Redisson会启动一个Watch Dog线程,负责定时续期锁的有效期。
  2. 续期机制:
    • Watch Dog线程会周期性地向Redis服务器发送续期命令(PTTLPEXPIRE)来延长锁的过期时间。
    • 续期任务的执行频率由配置参数lockWatchdogTimeout指定,默认为30秒。
  3. 锁释放时:
    • 当客户端调用Redisson的RLock对象的unlock方法释放锁时,Watch Dog线程会停止续期任务。

通过Watch Dog机制,Redisson可以定期检查锁的有效期,并在需要时进行续期操作,确保锁在业务执行期间不会过期。

需要注意的是,Watch Dog通过发送续期命令给Redis服务器来延长锁的过期时间,而不是通过修改Redis中锁的值来实现。这是因为Redis的单线程特性,避免了续期过程中的并发问题。

通过Redisson的锁续期机制,可以确保锁在业务执行期间持续有效,防止其他客户端获取到已过期的锁。

在Redisson中,锁的续期任务的执行频率可以通过配置参数进行调整。默认情况下,续期任务每隔30秒执行一次。具体的执行频率由以下两个参数控制:

  1. lockWatchdogTimeout
    
    • 这是一个全局的配置参数,用于设置续期任务的执行频率。
    • 默认值为30秒。
    • 可以通过Redisson的配置文件或编程方式进行配置。
  2. watchdogInterval
    
    • 这是在锁级别上的配置参数,用于设置特定锁的续期任务的执行频率。
    • 默认值与lockWatchdogTimeout相同,即30秒。
    • 可以在加锁时通过RLock对象的locklockAsync方法的参数进行配置。

通过调整这两个参数的值,可以改变锁的续期任务的执行频率。较小的间隔时间可以提供更频繁的续期,使锁在业务执行期间更加稳定。但是需要注意,过于频繁的续期任务可能会增加Redis服务器的负载,因此需要根据实际情况进行权衡和调整。

在实际应用中,可以根据业务需求和系统负载情况,选择合适的续期任务执行频率,以确保锁在业务执行期间持续有效。

Redis入门

1.Redis是什么?

Redis入门(1)——Redis是啥 & 安装Docker的Redis & Redis的基本数据类型+常用命令 & SpringBoot整合Redis初步

在这里插入图片描述

2.Redis里面存Java对象

Redis应用(8)——Redis的项目应用:结合SpringBoot如何在Redis里面存对象 & RedisUtil工具类的封装 & 遇到的问题

在这里插入图片描述

Redis进阶

1.雪崩/ 击穿 / 穿透

Redis应用(7)——Redis的项目应用(六):布隆过滤器—白名单 ----> Reids的问题,雪崩/ 击穿 / 穿透【重要】& 布隆过滤器

在这里插入图片描述

2.Redis高可用-主从+哨兵

Redis进阶(2)——Redis数据的持久化 & CAP分布式理论(高可用性) & Redis主从搭建 & Redis的哨兵机制

Redis进阶(3)——在Linux上基于Docker容器Redis搭建一主二从三哨兵 & SpringBoot整合Redis哨兵

华为云云耀云服务器L实例评测|初始化配置SSH连接 & 安装MySQL的docker镜像 & 安装redis以及主从搭建 & 7.2版本redis.conf配置文件

3.持久化RDB和AOF

Redis进阶(4)——结合redis.conf配置文件深入理解 Redis两种数据持久化方案:RDB和AOF

在这里插入图片描述

4.Redis未授权访问漏洞

认识redis未授权访问漏洞 & 漏洞的部分复现 & 设置连接密码 & redis其他命令学习

在这里插入图片描述

5.Redis里面安装BloomFilte

华为云云耀云服务器L实例评测|在Redis的Docker容器中安装BloomFilter & 在Spring中使用Redis插件版的布隆过滤器

Redis的应用

1.验证码

Redis应用(2)——Redis的项目应用(一):验证码 —> UUID到雪花ID & JMeter高并发测试 & 下载安装使用

在这里插入图片描述

2.Redis高并发抢购

Redis应用(3)——Redis的项目应用(二):抢购图书 —> Redis高并发的问题 & 分布式锁Redission的使用

在这里插入图片描述

Redis应用(4)——Redis的项目应用(三):抢购图书2.0 —> Lua脚本 & Redis+Lua+Redission实现抢购 & Redission锁

在这里插入图片描述

Redis进阶(5)——Redis数据一致性 & 用Java代码加锁解决一致性 & 采用lua脚本实现减1的原子性 & 分布式环境下的setnex锁及其问题 & Redission框架的使用

在这里插入图片描述
IDEA启动两个Tomcat服务的方式 & 使用nginx进行反向代理 & JMeter测试分布式情况下synchronized锁失效

在这里插入图片描述

3.缓存预热用户注册+验证码

Redis应用(5)——Redis的项目应用(四):缓存预热,用户注册为例 —>注册的流程 & 缓存预热的方式,quartz方式 / @Schedule方式

在这里插入图片描述

RabbitMQ的Docker版本安装 + 延迟插件安装 & QQ邮箱和阿里云短信验证码的主题模式发送

在这里插入图片描述

4.Redis和MySQL数据一致性

Redis应用(6)——Redis的项目应用(五):缓存自动更新 —>Canal管道 & MySQL配置+安装canal & 入门案例 & Canal的项目应用

在这里插入图片描述

基于canal缓存自动更新流程 & SpringBoot项目应用案例和源码

在这里插入图片描述

5.用户登陆布隆过滤器

Redis应用(7)——Redis的项目应用(六):布隆过滤器—白名单 ----> Reids的问题,雪崩/ 击穿 / 穿透【重要】& 布隆过滤器

在这里插入图片描述


总结

Redis冲冲冲——Redis分布式锁如何实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从根到叶:深入理解二叉搜索树

我们的心永远向前憧憬 尽管活在阴沉的现在 一切都是暂时的,转瞬即逝, 而那逝去的将变为可爱 &#x1f31d;(俄) 普希金 <假如生活欺骗了你> 1.二叉搜索树的概念 概念:搜索树&#xff08;Search Tree&#xff09;是一种有序的数据结构&#xff0c;用于存储和组…

github操作记录(踩坑)

github是程序员绕不开的东西。 网站打不开&#xff1f; 向雇主或有关部门申请合法信道连接互联网。 明明账号密码都对却登录失败&#xff1f; 向雇主或有关部门申请合法信道连接互联网。 重置密码失败&#xff1f; 向雇主或有关部门申请合法信道连接互联网。 TortoiseGit如…

模型压缩-剪枝算法概述

文章目录 1. 前言1.1 模型剪枝定义2 深度神经网络的稀疏性2.1,权重稀疏2.2 激活稀疏2.3 梯度稀疏2.4,小结3. 结构化稀疏3.1,结构化稀疏分类3.1.1 Channel/Filter 剪枝3.1.2 阶段级别剪枝3.2 结构化稀疏与非结构化稀疏比较参考资料参考自:

Facebook商城号为什么被封?防封养号技巧

由于Facebook商城的高利润空间&#xff0c;越来越多的跨境电商商家注意到它的存在。Facebook作为全球最大、用户量最大的社媒平台&#xff0c;同时也孕育了一个巨大的商业生态&#xff0c;包括广告投放、商城交易等。依托背后的大流量&#xff0c;Facebook商城起号较快&#xf…

优思学院|拉丁方实验设计是什么?

今天&#xff0c;我要给大家带来一个六西格玛实验设计的小窍门——拉丁方设计。这是一种巧妙的方式&#xff0c;帮助我们探索不同因素&#xff08;输入&#xff09;对结果&#xff08;输出&#xff09;的影响&#xff0c;同时巧妙地处理那些我们不想要的“噪音因素”。 想象一…

Linux 常用命令汇总(三):查看文件 内容处理

一、查看文件及内容处理命令 1.1 cat 1.1.1 介绍 cat 是 Linux 和其他 Unix-like 系统中一个非常基础且常用的命令&#xff0c;用于显示、合并或复制文本文件的内容 1.1.2 使用方法 cat [选项] [文件...] 1.1.3 参数详解 [选项]&#xff1a;控制 cat 命令的行为。[文件.…

vscode 远程开发golang

1.安装配置golang 下载解压 wget golangurl tar -xzvf golang 解压到/usr/local环境配置 在~/.bashrc文件最后加入下面三行 export GOROOT/usr/local/go # 这里就是go的源码目录 export PATH$PATH:$GOROOT/bin export GOPATH$HOME/goProject # 这里是home目录下的你自己建…

HEUFT电源维修x-ray发生器维修HBE211226

HEUFT电源维修x-ray发生器维修HBE211253;海富HEUFT在线液位检测X射线发生器维修&#xff0c;不限型型号系列。 德国海富推出HEUFT在线液位检测装置,满瓶检测系统HEUFT有着强大的功能,它的模块机构能整合很多程序,并依据不同的产品及其包装特性,照相技术,高频技术或X-ray技术。…

LInux-多线程基础概念

文章目录 前言预备页表详解缺页中断页表的映射 一、多线程是什么&#xff1f;轻量级进程 二、Pthread库pthread_create 前言 从本章的多线程开始&#xff0c;我们开始进入Linux系统的尾声&#xff0c;所以&#xff0c;在学习多线程的过程中&#xff0c;我们也会逐步对之前的内…

邮件营销新手必读指南?怎样做好邮件营销?

邮件营销的全流程及步骤&#xff1f;做好邮件营销有哪些注意点&#xff1f; 邮件营销作为一种传统却依然高效的推广手段&#xff0c;被众多企业所青睐。对于新手来说&#xff0c;如何开展邮件营销&#xff0c;却是一个值得探讨的话题。AokSend将为你提供一份邮件营销新手必读指…

国家妇女节放假是法定的假日

在这个充满活力和希望的春天&#xff0c;我们迎来了一个特殊的节日——国家妇女节。这是一个属于所有女性的节日&#xff0c;是一个庆祝女性成就、关爱女性权益的时刻。在这个特殊的日子里&#xff0c;我们不禁要问&#xff1a;国家妇女节放假是法定假日吗&#xff1f;让我们一…

Ps:辅助类工具组

工具箱里的辅助类工具为图像编辑和设计提供了重要的支持&#xff0c;能帮助用户更准确地测量、选取颜色或添加注释等。 快捷键&#xff1a;I 吸管工具 Eyedropper Tool 用于从图像中采样颜色。 用户可以通过点击屏幕上的任何点来选取那里的颜色&#xff0c;该颜色随即成为当前的…

Java+SpringBoot+Vue+MySQL实战:打造智能餐厅点餐系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

FreeRTOS学习笔记-基于stm32(2)任务的创建与删除,挂起与恢复

一、任务创建与删除 1、动态任务创建 xTaskCreate( TaskFunction_t pxTaskCode,const char * const pcName,const uint16_t usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreatedTask ); ①&#xff1a;使用此函数前需将宏 confi…

消息队列以及Kafka的使用

什么是消息队列 消息队列&#xff1a;一般我们会简称它为MQ(Message Queue)。其主要目的是通讯。 ps&#xff1a;消息队列是以日志的形式将数据顺序存储到磁盘当中。通常我们说从内存中IO读写数据的速度要快于从硬盘中IO读写的速度是对于随机的写入和读取。但是对于这种顺序存…

SQL 中 IN 与 <= 且 >= 的效率比较

1. 索引利用 当查询条件中的值是离散的、非连续的&#xff0c;或者是在多个不相邻的范围内时&#xff0c;使用 IN 可以更高效&#xff0c;因为 IN 可以直接跳到索引中的这些特定值。而 < 且 > 通常用于连续范围的查询&#xff0c;如果查询的是一个连续的区间&#xff0c…

2024年:AI领航研发新纪元

导言&#xff1a; 在21世纪的科技巨浪中&#xff0c;人工智能&#xff08;AI&#xff09;已经崭露头角&#xff0c;成为研发领域的核心变革者。其强大的潜力和无所不在的应用正在改变人类解决问题的方式&#xff0c;为未来的发展开启了无限可能。随着机器学习、自然语言处理、计…

模型精度fp16和fp32

FP16和FP32是两种不同的浮点数精度格式&#xff0c;在计算机科学特别是深度学习领域中广泛应用。 FP32&#xff08;单精度浮点数&#xff09;&#xff1a; FP32代表32位&#xff08;4字节&#xff09;单精度浮点数格式&#xff0c;这是传统上大多数深度学习模型训练和推理的标准…

代码随想录算法训练营第五十四天|392.判断子序列、115.不同的子序列

392.判断子序列 思路&#xff1a;判断子序列的问题&#xff0c;其实与最大公共子序列的问题是一样的&#xff0c;所以基本上写出来是一样的&#xff0c;但是今天又犯了一个错误&#xff0c;对于非连续子序列&#xff0c;不仅要在相等的时候进行更新&#xff0c;而且不等的时候也…

周立功USBCAN-E-mini分析仪的安装测试笔记

一、介绍 USBCAN-E-mini 智能 CAN 接口卡是系列 USBCAN 便携版本&#xff0c;与 USBCAN—E-U 单路智能 CAN 接口卡完全兼容。USBCAN-E-mini 智能 CAN 接口卡与 USB1.1 总线兼容的&#xff0c;集成 1 路 CAN 接口的智能型 CAN-bus 总线通讯接口卡。采用 USBCAN-E-mini 智能 CAN …