Redisson 大量用了 Lua

  • Redisson 大量用了 Lua
  • 远不止把 Redis 命令拼个 Lua 就完事

1. 加锁、解锁是 Lua

Redisson 最核心的 可重入锁

  • 加锁:hset + pexpire 用 Lua 原子执行
  • 解锁:hincrby + del 也是 Lua 原子执行

用 Lua 保证原子性


2. Redisson

比手写 SETNX + Lua 多了一整套分布式锁生产级系统

① 锁自动续期(看门狗机制)

  • 业务没执行完,锁快过期了
  • Redisson 有 watchdog 后台线程自动续期
  • 避免:任务没跑完,锁被释放 → 超严重问题

手写 Lua 根本做不到这个。

② 真正的可重入锁

同一个线程、多次加锁,只计数,不阻塞。内部用 hash 结构 存:

  • key -> {线程ID: 重入次数}

手写简单 Lua 一般做不到可重入。

阻塞等待 + 重试

  • lock() 会阻塞
  • 内部用 Redis 发布订阅 实现锁等待唤醒
  • 不是死循环空轮询

性能比你自己写 while true 好太多。

④ 支持一整套锁体系

  • 可重入锁 RLock
  • 公平锁 RedissonFairLock
  • 读写锁 RReadWriteLock
  • 红锁 RedissonRedLock
  • 多级缓存、分布式信号量、限流......

这些全是基于 Lua + 线程调度 + 心跳 + 订阅封装的完整组件。

⑤ 解决主从切换 锁失效问题

Redis 主从异步复制:

  • 主加锁 → 还没同步到从
  • 主挂了 → 从变成主
  • 别人能再加锁,出现锁重复

Redisson 提供 RedLock(红锁) 来尽量缓解。


3. 一句话总结

Redis + Lua = 原子操作基础 Redisson = 分布式锁完整实现 + 生产级可靠性

理解成:

  • 手写:简陋小作坊
  • Redisson:标准化工厂
相关推荐
折哥的程序人生 · 物流技术专研4 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang5 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
西门吹-禅6 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_6 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
weixin_BYSJ19877 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码7 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
Hui Baby8 小时前
Spring Security
java·后端·spring
IT笔记8 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
我才是银古9 小时前
构建 Java GIS 工具库:从碎片化 API 到统一抽象的设计实践
java·gis·geotools·gdal·esri
TPBoreas9 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言