Redis分布式锁的原理是什么如何续期(redis分布式锁的作用)

Redis分布式锁的原理是什么 如何续期

这篇文章给大家聊聊关于Redis分布式锁的原理是什么如何续期,以及分布式死锁解决办法对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

  1. 如何实现靠谱的分布式锁
  2. setnx可以取代分布式锁吗
  3. 分布式操作系统的基本功能
  4. Redis分布式锁的原理是什么如何续期

如何实现靠谱的分布式锁

谢邀~

我不写具体的代码,就花几分钟介绍一下什么是分布式锁,以及实现方案。

为什么需要分布式锁

在单个应用中,如果多个线程需要同时对一个数据进行修改,那么Java可以使用并发处理相关的API来保证,同一个时间,这个数据只能被一个线程修改,例如synchronized。

但是在分布式的环境当中,经常会有多个应用要同时修改同一个数据,如果不做互斥的话,很容易造成“未知的异常”。

比如商城,商品剩余量只有一件,如果碰巧两个应用同时要扣除商品数量,如果不做互斥的话,那么会出现明明商品数量不足,但是依然下单成功的情况。

分布式锁应该具备哪些条件同一时间只能被一个机器的一个线程执行;高性能的获得锁和释放锁;具有失效机制,防止死锁;又分阻塞锁和非阻塞锁,前者没有获得锁就等着,后者没有获得锁会直接返回失败。实现方式

基于ZooKeeper:ZooKeeper是一个为分布式应用提供一致性服务的开源组件。大概的思路就是利用临时节点与watch机制。每个锁占用一个普通节点/lock,当需要获取锁时在/lock目录下创建一个临时节点,创建成功则表示获取锁成功,失败则watch/lock节点,有删除操作后再去争锁。

基于Redis:基于redis的setnx()、get()、getset()方法做分布式锁。

基于数据库:在数据库中创建个表,字段创建唯一索引,想要获取锁,就向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁。

希望我的回答,能够帮助到你!我将持续分享Java开发、架构设计、职业发展等方面的见解,希望能得到你的关注;另外,关注我后私信【资料】两个字,可获取架构、大数据、面试等相关资料。

setnx可以取代分布式锁吗

不可以。虽然SETNX可以用于实现分布式锁,但是它并不能完全取代分布式锁。SETNX命令只能判断锁是否存在,如果存在则返回0,否则返回1。但是,它不能保证锁的超时释放,也不能防止死锁。因此,为了确保分布式锁的有效性和可靠性,需要使用更完整的分布式锁解决方案。

分布式操作系统的基本功能

分布式操作系统有如下三个基本功能:

进程管理、通信管理和资源管理。

分布式操作系统除了需要包括单机操作系统的主要功能外,还应该包括分布式进程通信、分布式文件系统、分布式进程迁移、分布式进程同步和分布式进程死锁等功能。

分布式文件系统是允许通过网络来互连的,使不同机器上的用户共享文件的系统。它能让运行它的所有主机共享,并可以管理操作系统内核和文件系统之间的通信。

Redis分布式锁的原理是什么如何续期

分布式锁的需求产生

分布式锁的需求是伴随着应用分布式部署而来的,在单体应用,且只部署一台服务器的情况下,通过java的同步锁即可实现。同步锁,即是一个原子性的操作。

那么当应用进行了分布式部署,应用有多个服务,这个时候应用服务端就没有一个可提供原子性操作的地方了,Redis性能高,且是单线程,因此可提供一个原子性操作的地方,利用它,就可以实现分布式锁。

用场景说话,使用Redis分布式锁的场景如下图所示:

如下图所示,随后会根据场景说明分布式锁及续期相关问题的来龙去脉。

图中序号1:进来一个请求,这个请求要求我们保存一个“订单A”;图中序号2:2.1步,请求进来,首先去尝试设置一个Redis值,他的键就是订单号“订单A”,如果尝试成功,则代表我这个线程是第一次设置,相当于我拿到了这个锁;如果尝试失败,那么,可以抛出异常或者等待一段时候后再次重试,这里可以根据业务场景的不同采取不同的策略。这里的关键是在Redis中的操作是单线程的,因此该操作是原子性的。2.2步,为了防止应用服务意外中断,Redis中的数据一直存活,消耗资源,需要设置一个超时时间。(如果为了严谨,可以将2.1,2.2两步封装成一个lua脚本部署在Redis服务器上)图中序号3:情况A,这个时候是当Redis的key还未失效,程序就已经执行完成,且删除了Redis中的数据,一切正常;情况B:就是需要续期的场景,如果要避免这个场景的出现,可以将Rediskey的失效时间设置长一点,可以应对大多数业务。如果要彻底解决,可以在应用端添加一个Redis锁的注册中心,然后起一个监听线程去监听这个注册中心,发现有锁还在被持有,但是Redis已经快过期了,则修改相应key的失效时间,进行续期。

OK,关于Redis分布式锁的原理是什么如何续期和分布式死锁解决办法的内容到此结束了,希望对大家有所帮助。

Redis分布式锁的原理以及如何续期

本文内容来自互联网,若需转载请注明:https://bk.jguuu.com//11/88404.html