redisson分布式锁

redis使用setnx实现的分布式锁,会存在4个问题

1、不可重入:同一个线程无法多次获取同一把锁

2、不可重试:获取锁只尝试一次就返回false,没有重试机制。

3、超时释放:锁超时释放虽然可以避免死锁,但如果是业务执行耗时较长,也会导致锁释放,存在安全隐患。

4、主从一致性:如果Redis提供了主从集群主从同步存在延迟,当主宕机时,如果从并同步主中的锁数据,则会出现锁实现。

二、可以直接使用redisson实现分布式锁

redisson是可重入锁,使用的是redis的hash接口,判断如果redis的hash里面的key是同一个线程时,value值加1,是使用lua脚本实现的。

redisson的分布式锁可以重试

可重入:  利用hash结构记录线程id和重入次数

可重试: 利用信号量和PubSub功能实现等待、唤醒,获取锁失败的重试机制

超时续约: 利用watchDog,每隔一段时间(releaseTime/3),重置超时时间

Redisson的multiLock:原理: 多个独立的Redis节点,必须在所有节点都获取重入锁,才算获取锁成功. 缺陷:运维成本高、实现复杂

相关推荐

  1. Redis - 分布式Redisson

    2024-07-22 10:18:01       52 阅读
  2. SpringBoot+Redisson分布式

    2024-07-22 10:18:01       42 阅读
  3. SpringBoot+Redisson分布式

    2024-07-22 10:18:01       57 阅读
  4. Redisson分布式

    2024-07-22 10:18:01       45 阅读
  5. redisson分布式

    2024-07-22 10:18:01       37 阅读
  6. Redisson 实现分布式

    2024-07-22 10:18:01       44 阅读
  7. 分布式Redisson

    2024-07-22 10:18:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 10:18:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 10:18:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 10:18:01       45 阅读
  4. Python语言-面向对象

    2024-07-22 10:18:01       55 阅读

热门阅读

  1. 深度学习落地实战:人脸面部表情识别

    2024-07-22 10:18:01       16 阅读
  2. Python中Selenium 和 keyboard 库的使用

    2024-07-22 10:18:01       12 阅读
  3. 【mybatis 一级缓存】

    2024-07-22 10:18:01       17 阅读
  4. QT表格显示MYSQL数据库源码分析(七)

    2024-07-22 10:18:01       16 阅读
  5. Github 2024-07-22开源项目日报Top10

    2024-07-22 10:18:01       13 阅读
  6. 十六、多任务

    2024-07-22 10:18:01       14 阅读
  7. 目标检测的隐形威胁:对抗攻击的深度解析

    2024-07-22 10:18:01       18 阅读
  8. ASP.NET Core Web深度探讨

    2024-07-22 10:18:01       15 阅读
  9. opencv—常用函数学习_“干货“_13

    2024-07-22 10:18:01       18 阅读
  10. 高精度-大整数计算模板

    2024-07-22 10:18:01       18 阅读
  11. Anonymous Informant

    2024-07-22 10:18:01       16 阅读
  12. Oracle(16)什么是视图(View)?

    2024-07-22 10:18:01       20 阅读