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

分布式锁的基本原理和基于lua脚本的实现(Redisson)

为了确保分布式锁可用,我们要确保锁的实现同时满足以下四个条件:

- 互斥性。在任意时刻,只有一个客户端能持有锁。

- 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。

- 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。

- 加锁和解锁必须具有原子性

而这四个条件,Redisson实现的分布式锁都可以满足,同时Redisson实现的分布式锁,还是可重入的。

@Service
public class TestServiceImpl implements TestService {@AutowiredRedissonClient redissonClient;@Overridepublic void incrWithLock() {// 获取锁RLock redisLock = redissonClient.getLock("lock:number");try {// 加锁,失败会在这里阻塞redisLock.lock();// 加锁成功,代码执行到这里RBucket<Integer> bucket = redissonClient.getBucket("number");// 获取key为number的value值int number = bucket.get();// 自增1number++;// 在放回redisbucket.set(number);} finally {// 释放锁redisLock.unlock();}}
}

http://www.lryc.cn/news/606241.html

相关文章:

  • 红黑树×协程×内存序:2025 C++后端核心三体问题攻防手册
  • 旅游城市数量最大化 01背包问题
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘plotly’问题
  • Mac安装Navicat教程Navicat Premium for Mac v17.1.9 Mac安装navicat【亲测】
  • IK 字段级别词典的升级之路
  • 【RH134 问答题】第 11 章 管理网络安全
  • ACL 2024 大模型方向优秀论文:洞察NLP前沿​关键突破!
  • 前端框架Vue3(四)——组件通信及其他API
  • SecurityContextHolder 管理安全上下文的核心组件详解
  • python之使用ffmpeg下载直播推流视频rtmp、m3u8协议实时获取时间进度
  • 金融分类提示词演示
  • 代码随想录Day35:动态规划(背包问题 二维 一维、分割等和子集)
  • 守护金融核心业务 | 博睿数据《金融业务全景与全链路智能可观测体系建设白皮书》发布!
  • 云上服务器常见的存储方式和类型
  • MySQL 中的 JOIN 操作有哪些类型?它们之间有什么区别?
  • vk框架或者普通函数封装的一些函数可以拿取使用【会持续更新】
  • Maven模块化开发与设计笔记
  • 一起学springAI系列一:初体验
  • 解释 MySQL 中的 EXPLAIN 命令的作用和使用场景
  • 机器学习——互信息(超详细)
  • 机器学习基础-seaborn
  • Mysql超详细安装配置教程(详细图文,保姆级)
  • 大数据之Hive
  • mysql主从搭建(docker)
  • Java设计模式之《命令模式》
  • 【LY88】ubuntu下的常用操作
  • 常用的ROS(Robot Operating System,机器人操作系统)包,用于机器人软件开发的工具和库
  • Prometheus监控多个MySQL及服务器性能:配置指南与最佳实践
  • 【YOLOv1】
  • 使用realsense进行目标检测并标识目标深度