返回顶部
首页 > 资讯 > 数据库 >Redis常见分布锁的原理是什么和怎么实现
  • 731
分享到

Redis常见分布锁的原理是什么和怎么实现

2024-04-02 19:04:59 731人浏览 薄情痞子
摘要

今天小编给大家分享一下Redis常见分布锁的原理是什么和怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我

今天小编给大家分享一下Redis常见分布的原理是什么和怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

常见的分布式锁的实现如下图:

Redis常见分布锁的原理是什么和怎么实现

基于数据库

悲观锁

悲观锁(Pessimistic Lock)顾名思义为很悲观的锁,每次在拿数据的时候都会上锁。这样别人想拿数据就被挡住,直到悲观锁被释放,悲观锁中的共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程,但是在效率方面,处理加锁的机制会产生额外的开销,且容易产生死锁。

实现原理

悲观并发控制实际上是"先取锁再访问"的保守策略,为数据处理的安全提供了保证.

Redis常见分布锁的原理是什么和怎么实现

具体实现

例如通过悲观锁来实现库存扣减的伪代码如下:

// 对于库存记录进行行锁

SELECT *FROM sys_Goods s WHERE s.Id='1' FOR UPDATE;

//执行库存扣减
update sys_stock s set s.stockQty=s.stockQty-#{number} where s.goodId=1 and s.stockQty>0;

//提交事务,自动释放悲观锁。

乐观锁

简介

乐观锁是基于数据版本号(version)的机制来实现的。数据库表添加"version"字段, 读取出数据时,将此版本号读出,在更新过程中,会对版本号进行比较,如果是一致的,则会成功执行本次操作,且版本号加1,如果版本号不一致,则会更新失败。

实现原理

相对悲观锁,乐观锁的实现不会使用到数据库的锁机制,乐观锁的原理使用的CAS的机制来实现的,CAS(Compare-and-Swap)即比较并替换.

Redis常见分布锁的原理是什么和怎么实现

  • 1、比较:读取到了一个值A,在将其更新为B之前,检查原值是否仍为A(未被其他线程改动).

  • 2、设置:如果是未发送变化,则将A更新为B结束。如果发生变化,则什么都不做。

具体实现

例如乐观锁来实现库存扣减的伪代码如下:

// 查询库存记录,获取版本号
SELECT stockQty,version FROM sys_goods s WHERE s.Id='1'

//执行库存扣减,防止出现超卖
update sys_stock s set 
  s.stockQty=s.stockQty-#{number},
  s.version=version+1
  where s.goodId=1 and s.stockQty>0 and version=#{version};

Redis实现分布式

关于Redis分布式锁的实现,已经在前期的文章中进行了讲解,大家可以参考如下文章

Spring Boot 实现Redis分布式锁原理

spring Boot 集成Redisson实现分布式锁详细案例

Zooker实现分布式锁

Zookper实现分布式锁,主要是应用ZooKeeper节点的临时和有序性来实现。

加锁过程

当客户端1请求时,Zookeeper客户端会创建一个持久节点Locks节点,如果客户端1想获取锁,会在locks节点下创建临时节点/node_000000,如果查找Locks下面所有临时有序子节点,当自己为最小的节点是则获取锁成功。

Redis常见分布锁的原理是什么和怎么实现

当客户端2尝试获取锁时,也会查看locks下面的临时节点,判断自己的节点/node_000001是不是最小,如果不是最小则获取锁失败,客户端2会向它排序靠前的节点node_000000注册watch事件,用来监听node_000000是否存在,虽然抢锁失败,但是node_000001进入等待状态。

Redis常见分布锁的原理是什么和怎么实现

释放锁的过程

Zookeeper的客户端业务完成或者客户端发生故障,都会删除临时节点并且释放锁。如果是任务完成,客户端1还会显式调用删除node_000000的指令。

Redis常见分布锁的原理是什么和怎么实现

例如上述图,客户端1断开,临时节点node_000000已被删除,而此时node_000001通过watcher监听发现自己为为最小的临时节点,所以获取锁成功。

异常场景分析

客户端1创建临时节点后,会与Zookeeper服务器维护一个Session,这个Session会依赖客户端 定时心跳来维持连接。由于网路异常原因,Zookeeper长时间收不到客户端1的心跳,就认为这个Session过期了,也会把这个临时节点删除,此时客户端2创建临时节点能够获取锁成功。当客户端网络恢复正常后,它仍然认为持有锁,此时就会造成锁冲突。

具体实现

Zookeeper实现分布式锁,可以采用Curator实现分布式锁,关于SpringBoot如何集成Curator,大家可以参考如下文章:

Java Spring Boot 集成Zookeeper

Zookpeer实现分布式锁实现库存扣减

 @RequestMapping("/lockStock")
    public void lockStock()
    {
       zooKeeperUtil.lock("/Locks", 1000, TimeUnit.SECONDS, ()->{
           //业务逻辑
       });
    }

小结:

关于分布式锁的实现的对比,详情请查看下图:

Redis常见分布锁的原理是什么和怎么实现

以上就是“Redis常见分布锁的原理是什么和怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: Redis常见分布锁的原理是什么和怎么实现

本文链接: https://lsjlt.com/news/74095.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis常见分布锁的原理是什么和怎么实现
    今天小编给大家分享一下Redis常见分布锁的原理是什么和怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我...
    99+
    2024-04-02
  • Redis常见分布锁的原理和实现
    目录前言基于数据库悲观锁实现原理具体实现乐观锁简介实现原理具体实现Redis实现分布式锁Zooker实现分布式锁加锁过程释放锁的过程异常场景分析具体实现Zookpeer实现分布式锁实现库存扣减总结前言 Java中的锁主要...
    99+
    2022-08-18
    Redis分布锁原理 Redis分布锁实现
  • Redis分布式锁的原理是什么和怎么实现
    这篇文章主要介绍了Redis分布式锁的原理是什么和怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redis分布式锁的原理是什么和怎么实现文章都会有所收获,下面我们一起来看看吧。1 一人一单并发安全问题之...
    99+
    2023-07-04
  • redis实现分布式锁的原理是什么
    这期内容当中小编将会给大家带来有关redis实现分布式锁的原理,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常...
    99+
    2024-04-02
  • redis分布式锁的实现原理是什么
    这篇文章主要讲解了“redis分布式锁的实现原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis分布式锁的实现原理是什么”吧!借助于redis...
    99+
    2024-04-02
  • 分布式锁的原理及Redis怎么实现分布式锁
    这篇文章主要介绍“分布式锁的原理及Redis怎么实现分布式锁”,在日常操作中,相信很多人在分布式锁的原理及Redis怎么实现分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2023-02-02
    redis
  • redis分布式锁的实现原理
    小编给大家分享一下redis分布式锁的实现原理,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。举个不太恰当...
    99+
    2024-04-02
  • InterProcessMutex实现zookeeper分布式锁原理是什么
    这篇“InterProcessMutex实现zookeeper分布式锁原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2023-06-29
  • Redis实现分布式锁的方法是什么
    本篇内容介绍了“Redis实现分布式锁的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在一个分布...
    99+
    2024-04-02
  • Redis分布式锁实现的方法是什么
    本篇内容主要讲解“Redis分布式锁实现的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis分布式锁实现的方法是什么”吧!一、分布式锁是什么分布式锁是 满足分布式系统或集群模式下...
    99+
    2023-07-05
  • 分布式锁redis实现方式是什么
    分布式锁的Redis实现方式有两种:基于SETNX命令和基于RedLock算法。1. 基于SETNX命令:使用Redis的SETNX...
    99+
    2023-09-12
    redis
  • redis分布式锁的实现原理实例分析
    这篇文章主要介绍了redis分布式锁的实现原理实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis分布式锁的实现原理实例分析文章都会有所收获,下面我们一起来看看吧。首先,为了确保分布式锁可用,我们至...
    99+
    2023-06-29
  • redis分布式锁的实现原理详解
    首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 1.互斥性。在任意时刻,只有一个客户端能持有锁。 2.不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有...
    99+
    2024-04-02
  • Redis分布式锁的实现原理介绍
    这篇文章主要讲解了“Redis分布式锁的实现原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis分布式锁的实现原理介绍”吧!一、写在前面现在面试,一般都会聊聊分布式系统这块的东西...
    99+
    2023-06-02
  • Spring Boot 实现Redis分布式锁原理
    目录分布式锁实现引入jar包封装工具类模拟秒杀扣减库存测试代码方案优化问题1:扣减库存逻辑无法保证原子性,问题2:如果加锁失败,则会直接访问,无法重入锁总结分布式锁实现 引入jar包...
    99+
    2022-11-13
    Spring Boot 实现Redis分布式锁 Spring Boot  Redis分布式锁
  • Redis分布式锁怎么实现
    这篇文章给大家分享的是有关Redis分布式锁怎么实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。分布式锁一般有三种实现方式:1、数据库乐观锁;2、基于Redis的分布式锁;3、...
    99+
    2024-04-02
  • Redis怎么实现分布式锁
    这篇文章主要介绍“Redis怎么实现分布式锁”,在日常操作中,相信很多人在Redis怎么实现分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis怎么实现分布式锁”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • redis和zookeeper中怎么实现分布式锁
    redis和zookeeper中怎么实现分布式锁,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。   一、基于redis的分布...
    99+
    2024-04-02
  • 详解Redis分布式锁的原理与实现
    目录前言使用场景为什么要使用分布式锁如何使用分布式锁流程图分布式锁的状态分布式锁的特点分布式锁的实现方式(以redis分布式锁实现为例)总结前言 在单体应用中,如果我们对共享数据不进行加锁操作,会出现数据一致性问题,我们...
    99+
    2022-06-23
    Redis分布式锁使用 Redis 分布式锁
  • zookpeer和redis的抉择分布式锁怎么实现
    这篇文章主要讲解了“zookpeer和redis的抉择分布式锁怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“zookpeer和redis的抉择分布式锁怎么实现”吧!正文先上结论:zo...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作