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:标准化工厂
相关推荐
free-elcmacom1 小时前
C++ 函数占位参数与重载详解:从基础到避坑
java·前端·算法
Greenland_121 小时前
Android Java使用Glide无法生成GlideApp
android·java·glide
祁梦2 小时前
Redis从入门到入土 --- 黑马点评点赞功能实现详解
java·后端
唯一世2 小时前
Open Feign最佳实践
java·spring cloud
小江的记录本2 小时前
【MacOS】MacBook Pro 键盘全解析 + macOS 快捷键大全
java·经验分享·学习·macos·计算机外设·键盘·敏捷开发
淘源码d2 小时前
基于Spring Boot + Vue的诊所管理系统(源码)全栈开发指南
java·vue.js·spring boot·后端·源码·门诊系统·诊所系统
李少兄2 小时前
IntelliJ IDEA 中撤销 Commit
java·elasticsearch·intellij-idea
iPadiPhone2 小时前
Java 反射机制底层原理、面试陷阱与实战指南
java·开发语言·后端·面试