当前位置: 首页 > news >正文

Redis实现分布式锁详解

前言

用 Redis 实现分布式锁,是我们常见的实现分布式锁的一种方式

下面是 redis 实现 分布式锁的四种方式,每种方式都有一定的问题,直到最后的 zookeeper 

先透露一下:

Redission 解决了 set ex nx 无法自动续期的问题

RedLock 解决了 Redission 和 set ex nx 的单点故障问题

Zookeeper 解决了 RedLock 实现复杂的问题

set ex nx

在 Redis 中实现分布式锁的常见方法是通过 set ex nx 命令 + lua 脚本组合使用。确保多个客户端不会获得同一个锁的同时,也保证了安全解锁和意外情况下锁的自动释放

ex:设置过期时间,单位是 s        nx:仅当键不存在时才设置

加锁:SET lock_key uniqueValue EX expire_time NX

解锁:使用 lua 脚本,先通过 get 获取 key 的 value 判断锁是否是自己加的,如果是则 del

之所以要有 uniqueValue 是为了防止被别的客户端给释放了

Redission

set ex nx 缺点就是锁的续期问题,只能设置一个固定时间,如果未完成逻辑锁就过期了,数据就可能产生不一致

所以需要一个看门狗机制,redission 就是一个好用的方式

看门狗机制

业界出了一个看门狗机制来防止这种情况的产生。

理论很简单,在抢到锁之后,后台会有一个任务,定时向 redis 进行锁的续期。比如锁的过期时间是 30s,可以每过三分之一时长(30/3)10s 后就去 redis 重新设置过期时间为 30s。

在锁被释放的时候,就移除这个定时任务。

redission

redission是一个类库,封装了很多redis操作,便于我们使用。

其实现的分布式锁就引入了看门狗机制,具体原理和上面所述的一致

RedLock

set ex nx 和 redisson 有什么缺点:单点故障

单点故障问题

单台 Redis 实现分布式锁存在单点故障问题,如果采用主从读写分离架构,如果一个客户端在主节点上锁成功,但是主节点突然宕机,由于主从延迟导致从节点还未同步到这个锁,此时可能有另一个客户端抢到新晋升的主节点上的锁,此时会导致两个客户端抢到锁,产生了数据不一致。

基于这个情况,Redis 推出了 Redlock。

 

Zookeeper

zookeeper 暂时还没有学,先搁置一下吧,欢迎评论区交流

相关文章:

Redis实现分布式锁详解

前言 用 Redis 实现分布式锁,是我们常见的实现分布式锁的一种方式 下面是 redis 实现 分布式锁的四种方式,每种方式都有一定的问题,直到最后的 zookeeper 先透露一下: Redission 解决了 set ex nx 无法自动续期的问题 RedLo…...

表单标签(使用场景注册页面)

表单域&#xff08;了解即可&#xff0c;还要到学习服务器阶段才可以真正送到后台&#xff09; 定义了一个区域了之后&#xff0c;可以把这部分区域发送到后台上 <form action“url地址” method“提交方式” name"表单域名称">各种表单元素控件 </form>…...

c++ template-3

第 7 章 按值传递还是按引用传递 从一开始&#xff0c;C就提供了按值传递&#xff08;call-by-value&#xff09;和按引用传递&#xff08;call-by-reference&#xff09;两种参数传递方式&#xff0c;但是具体该怎么选择&#xff0c;有时并不容易确定&#xff1a;通常对复杂类…...

【创建模式-单例模式(Singleton Pattern)】

赐萧瑀 实现方案饿汉模式懒汉式&#xff08;非线程安全&#xff09;懒汉模式&#xff08;线程安全&#xff09;双重检查锁定静态内部类 攻击方式序列化攻击反射攻击 枚举(最佳实践)枚举是一种类 唐 李世民 疾风知劲草&#xff0c;板荡识诚臣。 勇夫安识义&#xff0c;智者必怀仁…...

攻防世界你猜猜

打开题目发现是一串十六进制的数据 我尝试解码了一下没发现什么&#xff0c;最后找了一下发现因为这是504B0304开头的所以是一个zip文件头 用python代码还原一下 from Crypto.Util.number import * f open("guess.zip","wb") s 0x504B03040A0001080000…...

【Axure教程】标签版分级多选下拉列表

分级多选下拉列表是指一个下拉列表&#xff0c;它包含多个层次的选项&#xff0c;用户可以选择一个或多个选项。这些选项通常是根据某种层级关系来组织的&#xff0c;例如从上到下有不同的分类或者过滤条件&#xff0c;用户选择上层选项后&#xff0c;下层选项会发生变化&#…...

DeepSeek图解10页PDF

以前一直在关注国内外的一些AI工具&#xff0c;包括文本型、图像类的一些AI实践&#xff0c;最近DeepSeek突然爆火&#xff0c;从互联网收集一些资料与大家一起分享学习。 本章节分享的文件为网上流传的DeepSeek图解10页PDF&#xff0c;免费附件链接给出。 1 本地 1 本地部…...

Centos7 停止维护,docker 安装

安装docker报错 执行docker安装命令&#xff1a;sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&#xff0c;出现如下错误 更换yum源 [rootlocalhost yum.repos.d]# sudo mv /etc/yum.repos.d/CentOS-Base.repo /et…...

日志级别修改不慎引发的一场CPU灾难

背景 今天下午16.28有同事通过日志配置平台将某线上应用部分包的日志等级由error调为info&#xff0c;进而导致部分机器CPU升高&#xff0c;甚至有机器CPU达到100%&#xff0c;且ygc次数增加&#xff0c;耗时增加到80&#xff5e;100ms。 故障发现与排查 16.28陆续出现线上C…...

FPGA实现SDI视频缩放转UltraScale GTH光口传输,基于GS2971+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本博已有的 SDI 编解码方案我这里已有的FPGA图像缩放方案 3、工程详细设计方案工程设计原理框图SDI 输入设备GS2971芯片BT1120转RGB…...

二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号

目录 一、程序填空&#x1f4dd; --- 矩阵主、反对角线元素之和 题目&#x1f4c3; 分析&#x1f9d0; 二、程序修改&#x1f6e0;️ --- 二分法求方程根 题目&#x1f4c3; 分析&#x1f9d0; 三、程序设计&#x1f4bb; --- 处理字符串中 * 号 题目&#x1f…...

利用 Python 爬虫获取按关键字搜索淘宝商品的完整指南

在电商数据分析和市场研究中&#xff0c;获取商品的详细信息是至关重要的一步。淘宝作为中国最大的电商平台之一&#xff0c;提供了丰富的商品数据。通过 Python 爬虫技术&#xff0c;我们可以高效地获取按关键字搜索的淘宝商品信息。本文将详细介绍如何利用 Python 爬虫技术获…...

什么是幂等性

幂等性&#xff08;Idempotence&#xff09;是一个在数学、计算机科学等多个领域都有重要应用的概念&#xff0c;下面从不同领域为你详细介绍其含义。 数学领域 在数学中&#xff0c;幂等性是指一个操作或函数进行多次相同的运算&#xff0c;其结果始终与进行一次运算的结果相…...

群晖NAS如何通过WebDAV和内网穿透实现Joplin笔记远程同步

文章目录 前言1. 检查群晖Webdav 服务2. 本地局域网IP同步测试3. 群晖安装Cpolar工具4. 创建Webdav公网地址5. Joplin连接WebDav6. 固定Webdav公网地址7. 公网环境连接测试 前言 在数字化浪潮的推动下&#xff0c;笔记应用已成为我们记录生活、整理思绪的重要工具。Joplin&…...

示例:JAVA调用deepseek

近日&#xff0c;国产AI DeepSeek在中国、美国的科技圈受到广泛关注&#xff0c;甚至被认为是大模型行业的最大“黑马”。在外网&#xff0c;DeepSeek被不少人称为“神秘的东方力量”。1月27日&#xff0c;DeepSeek应用登顶苹果美国地区应用商店免费APP下载排行榜&#xff0c;在…...

【提示工程】:如何有效与大语言模型互动

随着人工智能技术的快速发展,大语言模型(LLM)如 GPT 系列在各类任务中的应用越来越广泛。从文本生成到代码编写,从数据分析到内容创作,这些模型展现出了强大的能力。然而,要充分发挥大语言模型的潜力,关键在于如何设计高质量的提示词(Prompts)。这门技术被称为提示工程…...

操作系统—经典同步问题

补充 互斥信号量mutex初值均为1 同步信号量根据问题实际描述自己设计 生产者-消费者问题 问题描述&#xff1a;一组生产者进程和一组消费者进程 共享一个初始为空、大小为n的缓冲区。&#xff08;缓冲区&#xff1a;临界资源&#xff09; 只有缓冲区没满时&#xff0c;生产者…...

profinet工业通信协议网关:提升钢铁冶炼智能制造效率的利器

工业通信协议网关profinet转ethercat&#xff08;稳联技术WL-PN-ECATM&#xff09;在钢铁冶炼生产线中的智能应用实践 在现代钢铁冶炼生产中&#xff0c;复杂的设备互联和数据传输对生产效率和质量控制至关重要。本案例详细阐述了某大型钢铁集团通过工业通信协议网关实现生产线…...

Vue基础:计算属性(描述依赖响应式状态的复杂逻辑)

文章目录 引言computed() 方法期望接收一个 getter 函数可写计算属性:计算属性的 Setter计算属性的缓存机制调试 Computed引言 推荐使用计算属性来描述依赖响应式状态的复杂逻辑 computed 函数:它接受 getter 函数并为 getter 返回的值返回一个不可变的响应式 ref 对象。 c…...

leetcode:1534. 统计好三元组(python3解法)

难度&#xff1a;简单 给你一个整数数组 arr &#xff0c;以及 a、b 、c 三个整数。请你统计其中好三元组的数量。 如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件&#xff0c;则认为它是一个 好三元组 。 0 < i < j < k < arr.length|arr[i] - arr[j]| &l…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...