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

Redis——RedLock、Zookeeper及数据库实现分布式锁

在分布式系统中,实现分布式锁是确保数据一致性和防止并发问题的重要手段。以下是使用Redis的RedLock算法、ZooKeeper以及数据库实现分布式锁的基本概念和步骤:

1. Redis的RedLock算法

Redis的RedLock算法是Redis官方推荐的一种分布式锁实现方式,它基于多个Redis节点来避免单点故障。

实现步骤:

  1. 获取多个Redis主节点:首先,你需要一个Redis主节点的集合。这些节点应该是完全独立的,并且它们之间不存在主从复制关系。
  2. 获取锁:客户端尝试在多个Redis节点上获取锁。为了获取锁,客户端在每个节点上执行以下操作,使用相同的key和唯一的value(例如当前时间戳和客户端ID):
    • 使用SET命令设置key,value为唯一值,并且设置过期时间(TTL)。这个命令应该使用NX(仅当key不存在时设置)选项。
    • 如果SET命令成功,那么客户端已经获取了该节点上的锁。
  3. 计算成功获取锁的节点数:如果客户端在超过半数(N/2+1,其中N是Redis节点总数)的节点上成功获取了锁,那么客户端就成功获取了分布式锁。
  4. 释放锁:当客户端完成操作或需要释放锁时,它应该向所有Redis节点发送删除key的命令。

优点:

  • 基于多个Redis节点,避免了单点故障。
  • 锁的获取和释放过程相对简单。

缺点:

  • 需要多个Redis节点。
  • 如果Redis节点响应慢或网络延迟,可能会导致锁的获取失败。

2. ZooKeeper实现分布式锁

ZooKeeper是一个高性能的分布式协调服务,它提供了分布式锁的实现。

实现步骤:

  1. 创建临时有序节点:客户端在ZooKeeper中创建一个临时有序节点(ephemeral sequential node)。这个节点是临时的,当客户端与ZooKeeper的连接断开时,该节点会被自动删除。
  2. 判断是否获得锁:客户端检查自己创建的节点是否是当前最小的节点(即排在所有节点序列的最前面)。如果是,那么客户端就获得了锁。
  3. 等待或重试:如果客户端创建的节点不是最小的节点,那么它会等待或进行重试。等待的方式可以是监听前一个节点的删除事件,一旦前一个节点被删除,客户端就检查自己是否成为了最小的节点。
  4. 释放锁:当客户端完成操作或需要释放锁时,它只需要删除自己在ZooKeeper中创建的临时节点即可。

优点:

  • ZooKeeper提供了强一致性的保证。
  • ZooKeeper是一个成熟的分布式协调服务,具有广泛的应用和社区支持。

缺点:

  • 需要部署和运行ZooKeeper集群。
  • 相对于Redis,ZooKeeper的锁获取和释放过程可能更复杂。

3. 数据库实现分布式锁

数据库也可以用来实现分布式锁,但这种方式通常不如Redis和ZooKeeper高效。

实现步骤:

  1. 创建锁表:在数据库中创建一个锁表,该表至少包含一个字段用于表示锁的key,以及一个字段用于表示锁的持有者。
  2. 获取锁:客户端尝试在锁表中插入一条记录,key为所需的锁,持有者为当前客户端的唯一标识。如果插入成功,那么客户端就获得了锁。为了防止多个客户端同时插入同一条记录,可以使用数据库的乐观锁或悲观锁机制。
  3. 判断是否获得锁:如果插入失败(例如因为存在相同的key),那么客户端就需要等待或进行重试。
  4. 释放锁:当客户端完成操作或需要释放锁时,它只需要删除自己在锁表中插入的记录即可。

优点:

  • 可以利用现有的数据库系统。

缺点:

  • 数据库的锁获取和释放操作可能涉及网络I/O和磁盘I/O,效率较低。
  • 在高并发场景下,数据库可能成为性能瓶颈。
  • 需要编写复杂的SQL语句和数据库事务来确保数据的一致性和锁的正确性。

相关文章:

Redis——RedLock、Zookeeper及数据库实现分布式锁

在分布式系统中,实现分布式锁是确保数据一致性和防止并发问题的重要手段。以下是使用Redis的RedLock算法、ZooKeeper以及数据库实现分布式锁的基本概念和步骤: 1. Redis的RedLock算法 Redis的RedLock算法是Redis官方推荐的一种分布式锁实现方式&#x…...

OpenSSL自签证书并基于Express搭建Web服务进行SSL/TLS协议分析

OpenSSL自签证书并基于Express搭建Web服务进行SSL/TLS协议分析 起因 最近在学习安全协议,大多数实验都是基于Windows下IIS,或者Linux下nginx搭建的Web服务,搭建环境和编写配置文件比较麻烦。而且我有多个不同环境的设备,折腾起来…...

记录一次 vue2 前端项目整合过程

整合成功效果图 具体说明: 项目A是现在的vue2前端项目,项目B是一个开源的工作流前端,项目后端代码已经整合了,就不多提了。这里主要记录下前端整合的过程和思路。 1、开源工作流里面的功能,拷贝到自己对应的vue2项目里…...

物联网五层架构分析

物联网五层架构分析 随着科技的迅速发展,物联网(IoT)作为日常生活中不可或缺的一部分,已融入人们的生活和工作中。物联网五层架构,包括感知层、网络层、数据层、应用层和业务层,扮演着关键的角色。 感知层 …...

【Java EE】多线程(三)线程状态

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…...

FFmpeg常用API与示例(一)—— 工具库篇(av_log、AVDictionary、avio)

工具层 1.av_log 可以设置日志的级别,这个看看名字就明白了,也不用过多的解释。 AV_LOG_PANICAV_LOG_FATALAV_LOG_ERRORAV_LOG_WARNINGAV_LOG_INFOAV_LOG_VERBOSEAV_LOG_DEBUG void test_log() {/ av_register_all();AVFormatContext *pAVFmtCtx NU…...

日志的基本用法

目标 1. 掌握如何设置日志级别 2. 掌握如何设置日志格式 3. 掌握如何将日志信息输出到文件中 1. logging模块 Python中有一个标准库模块logging可以直接记录日志 1.1 基本用法 import logging logging.debug("这是一条调试信息") logging.info("这是一条…...

什么是页分裂、页合并?

数据组织方式 在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT)。 行数据,都是存储在聚集索引的叶子节点上的。而我们之前也讲解过InnoDB的逻辑结构图: 在I…...

软件2班20240513

第三次作业 package com.yanyu;import java.sql.*; import java.util.ResourceBundle;public class JDBCTest01 {public static void main(String[] args) {ResourceBundle bundle ResourceBundle.getBundle("com/resources/db");// ctrl alt vString driver …...

嵌入式学习-时钟树

时钟树 时钟分类 时钟树框图 LSI与LSE HSI、HSE与PLL 系统时钟的产生 AHB、APBx的时钟配置 相关寄存器 寄存器部分的细节内容请参考手册。 相关库函数...

对博客系统基本功能进行自动化测试(Junit + Selenium)

环境搭建&#xff1a; 浏览器&#xff1a; 本次测试使用Chrome浏览器在jdk的bin目录下安装对应浏览器驱动&#xff08;尽量选择与浏览器版本相近的驱动&#xff09;chromedriver.storage.googleapis.com/index.htmlJunit依赖&#xff1a; <!-- https://mvnreposit…...

《换你来当爹》:AI驱动的养成游戏,探索虚拟亲子关系的新模式

AI技术如何重塑我们对游戏互动的认知 在人工智能技术的浪潮下&#xff0c;一款名为《换你来当爹》的AI养成游戏&#xff0c;以其创新的互动模式和个性化体验&#xff0c;吸引了游戏爱好者的目光。这款游戏利用了先进的LLM技术&#xff0c;通过AI实时生成剧情和图片&#xff0c…...

在idea中使用vue

一、安装node.js 1、在node.js官网&#xff08;下载 | Node.js 中文网&#xff09;上下载适合自己电脑版本的node.js压缩包 2、下载完成后进行解压并安装&#xff0c;一定要记住自己的安装路径 一直点击next即可&#xff0c;这部选第一个 3、安装成功后&#xff0c;按住winR输入…...

Linux系统编程:进程控制

1.进程创建 1.1 fork函数 fork&#xff08;&#xff09;通过复制调用进程来创建一个新进程。新进程称为子进程&#xff0c;是调用进程的精确副本 进程&#xff0c;但以下几点除外&#xff1a; 子进程有自己的PID&#xff0c;此PID与任何现有进程组的ID不匹配子进程的父进程ID…...

Android 异常开机半屏重启代码分析

Android 的稳定性是 Android 性能的一个重要指标&#xff0c;它也是 App 质量构建体系中最基本和最关键的一环&#xff1b;如果应用经常崩溃&#xff0c;或者关键功能不可用&#xff0c;那显然会对我们的留存产生重大影响所以为了保障应用的稳定性&#xff0c;我们首先应该树立…...

Kafka从0到消费者开发

安装ZK Index of /zookeeper/zookeeper-3.9.2 下载安装包 一定要下载-bin的&#xff0c;不带bin的是源码&#xff0c;没有编译的&#xff0c;无法执行。-bin的才可以执行。 解压 tar -zxvf apache-zookeeper-3.9.2-bin.tar.gz 备份配置 cp zoo_sample.cfg zoo_sample.cfg-b…...

01-项目功能,架构设计介绍

稻草快速开发平台 开发背景就是通过此项目介绍使用SpringBoot Vue3两大技术栈开发一个拥有动态权限、路由的前后端分离项目&#xff0c;此项目可以继续完善&#xff0c;成为一个模板为将来快速开发做铺垫。 实现功能 开发流程 通过命令构建前端项目在VSCode中开发&#xff…...

bvh 好用强大的播放器源码

目录 效果图&#xff1a; 显示旋转角度&#xff1a; 显示骨骼名称 下载链接&#xff1a; 可以显示骨骼名称&#xff0c;旋转角度&#xff0c;自适应大小&#xff0c;支持3维npz数据可视化 python实现&#xff0c;提供源代码&#xff0c;修改和完善很方便。 根据3维npz生成…...

安阳在线知识付费系统,培训机构如何进行课程体系的设置?

校外培训不管是从招生还是课程体系都是截然不同的&#xff0c;在课程体系设置上&#xff0c;不同的层次设计也就不同。课程体系设计在功能诉求上可以分为入门课、核心课、高利润课、种子课四个类别。下面为大家介绍一下。 1、入门课 “入门课”就是最易、最省、最少障碍的满足家…...

网络编程:服务器模型-并发服务器-多进程

并发服务器概念&#xff1a; 并发服务器同一时刻可以处理多个客户机的请求 设计思路&#xff1a; 并发服务器是在循环服务器基础上优化过来的 &#xff08;1&#xff09;每连接一个客户机&#xff0c;服务器立马创建子进程或者子线程来跟新的客户机通信 &#xff08;accept之后…...

服务器末级缓存优化:指令-数据关联性管理技术

1. 服务器工作负载中的末级缓存挑战在现代多核处理器架构中&#xff0c;共享末级缓存(Shared Last-Level Cache, LLC)的性能优化一直是计算机体系结构研究的核心课题。随着云计算和分布式计算的普及&#xff0c;服务器工作负载呈现出两个显著特征&#xff1a;指令足迹(instruct…...

回归分析((>^ω^<)喵)

回归分析找到2个数据以上的的关系做预测的。是预测数字形的而不是男还是女这种问题1.举例略说这是一张图&#xff0c;是学习时间与成绩的回归分析&#xff0c;这条红线是回归线Xx是自变量&#xff0c;是用于预测的&#xff0c;例如学习时间&#xff0c;是因Yy是因变量 &#xf…...

JWT权限治理:从无状态凭证到可管控权限单元

1. 这不是又一个“登录后跳转首页”的玩具项目JWT在Java Web权限控制里被讲烂了&#xff0c;但绝大多数人写的所谓“基于JWT的系统”&#xff0c;其实连Token刷新都靠前端定时重登&#xff0c;后端连黑名单都没建&#xff0c;更别提并发登出、设备绑定、权限粒度动态变更这些真…...

2026 BI指标管理平台设计与最佳实践

引言关于衡石科技&#xff08;HENGSHI&#xff09;&#xff1a;衡石科技是国内领先的嵌入式BI PaaS平台提供商&#xff0c;其核心产品HENGSHI SENSE以"让数据分析无处不在"为使命&#xff0c;为企业提供从数据连接、数据准备、指标管理、可视化分析到智能问答的全链路…...

WordPress与PageAdmin CMS深度技术对比:从架构到国产化合规的全维度分析

摘要在内容管理系统选型中&#xff0c;WordPress作为全球市场占有率最高的开源CMS&#xff0c;与国内企业级平台PageAdmin CMS代表了两种不同的技术路线。本文从底层架构&#xff08;PHP vs .NET Core&#xff09;、数据库设计、缓存策略、安全机制、二次开发能力、国产化适配及…...

ESP32 + SPH0645麦克风:用Python在电脑上实时播放音频的保姆级教程(附避坑指南)

ESP32 SPH0645麦克风&#xff1a;Python服务端实时音频流处理实战指南 在物联网和嵌入式音频处理领域&#xff0c;实时音频流的采集与传输一直是个既基础又关键的挑战。ESP32作为一款性价比极高的Wi-Fi/蓝牙双模芯片&#xff0c;搭配专业级数字麦克风SPH0645&#xff0c;能够构…...

汽车零部件品牌升级方法拆解:复杂B2B能力如何被客户看懂

从B2B表达方法看&#xff0c;汽车零部件品牌升级可以理解为一个“客户判断结构化”的问题。企业不是简单输出自我介绍&#xff0c;而是要把技术能力、项目经验、质量体系、协同机制与证据材料&#xff0c;转化为客户不同角色都能使用的判断信息。很多汽车零部件企业已经完成了实…...

ISTA 3B-2013 全解析|零担货物 (LTL) 综合模拟运输测试标准(CSDN 完整版)前言

前言 ISTA 3B-2013 是 ISTA 3 系列高级综合模拟测试&#xff0c;专门针对零担货物运输&#xff08;LTL&#xff09; 的包装件。 零担运输的特点是多货混装、多次中转、人工 / 叉车交叉搬运、环境复杂&#xff0c;因此 3B 是工业、设备、家电、汽配、大型包装最贴近真实物流的测…...

“我35岁,年薪50万,却觉得自己是个‘废人’”

你有过那种感觉吗&#xff1f;回头一看&#xff0c;工作了十年&#xff0c;简历上好像什么都做过&#xff0c;但心里却虚得要命&#xff0c;觉得自己随时可以被替代。尤其是当“35岁”这个魔咒般的年龄落在你头上时&#xff0c;这种恐慌感在深夜会加倍袭来。凌晨两点&#xff0…...

告别“感觉能用”:基于 Ragas 构建 RAG 自动化回归测试流水线的方法论

很多团队把 RAG 系统做到能演示、能回答、能接知识库之后,心里都会出现一种熟悉又危险的判断:看起来差不多能用了。 但只要系统真的进入业务场景,这种“差不多”很快就会露出问题。今天回答还算靠谱,明天换一批文档就开始飘;演示集表现很好,真实用户一多就出现答非所问;…...