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

第十四天本地锁、Redis分布锁、Redisson锁三者的区别

一、为什么要有redis分布式锁,它解决了什么问题?

          在传统单体架构的项目下,使用本地锁synchronized和lock锁就可以锁住当前进程,保证线程的安全性,但是本地锁解决不了分布式环境下多个服务资源共享的问题,而分布式锁可以解决这个问题。

二、Redis分布式锁

 

1.加锁原子性--->set nxex + uuid全局唯一

2.删锁原子性--->通过redis+lua脚本

3.锁自动续期问题--->设置够长的过期时间。

最终目的:多个微服务抢占锁,最终只有一个微服务占用到锁并保证原子性。

三、Redissoon分布式锁

1、获取锁,就算锁名一样,多个微服务也是同一把锁

2、加锁是阻塞式等待,默认加的锁都是30s

3、看门狗自动续期机制:

        锁自动续期,如果业务超长,运行期间自动给锁续期上新的30s,不用担心业务时间长,锁自动过期被删除的造成的死锁问题。加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s以后删除。

4、Redisson读写锁

读写锁:保证一定能读取到最新数据,数据修改期间,写锁是一个排它锁,读锁是一个共享锁

除了读读锁不互斥,其余锁都需要阻塞等待(互斥)。

5、闭锁
        Redisson闭锁是一种非常实用的分布式同步工具,可以帮助开发人员解决多线程并发访问共享资源的问题,可以阻塞多个线程,在多个应用程序之间共享,支持自动释放锁,防止因为线程崩溃或其他异常,例如秒杀业务只有10000件商品,用闭锁就可以实现商品不会出现超卖问题

6、Redisson信号量
        Redisson信号量是一种分布式锁,它可以控制多个线程对共享资源的访问,比如停车位,并发限流,Redisson信号量基于Redis实现,具有高性能、高可用性和可扩展性等优点。

总结:分布式架构下推荐使用Redisson分布式锁,因为原始的redis分布式锁存在两大严重问题,一是死锁问题、二是锁没有自动续期机制,而Redisson就完美解决了原始redis分布式锁的不足。


http://www.kler.cn/a/11680.html

相关文章:

  • ES6模块、CommonJS、AMD等不同的模块化实现。
  • 光流法与直接法在SLAM中的应用
  • vue2面试题6|[2024-11-11]
  • wordpress实用功能A5资源网同款 隐藏下载框 支付框 需要登录才能查看隐藏的内容
  • SDL线程
  • docker 拉取MySQL8.0镜像以及安装
  • 什么是MVVM?
  • Kafka是如何支持百万级TPS的?
  • Pandas2.0它来了,这些新功能你知道多少?
  • 冥想第七十六十三天
  • 使用Go语言打造轻量级Web框架
  • 【学习笔记】Linux基础
  • 【排序】【二分】【角度制】个人练习-Leetcode-1610. Maximum Number of Visible Points
  • 【高危】Apache Linkis <1.3.2 存在反序列化漏洞(CVE-2023-29216)
  • 初识C语言————3
  • Vue3——一文入门Vue3
  • Python圈的普罗米修斯——一套近乎完善的监控系统
  • 「SQL面试题库」 No_34 连续空余座位
  • Python的并发编程-3
  • nginx
  • js 身份证最后一位计算
  • SQL——多表连接查询
  • 一种供水系统物联网监测系统
  • ROS1学习笔记:常用可视化工具的使用(ubuntu20.04)
  • 【LeetCode: 剑指 Offer II 112. 最长递增路径 | 递归 | DFS | 深度优先遍历 | 记忆化缓存表】
  • Java——矩形覆盖