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:标准化工厂
相关推荐
一直不明飞行5 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
REDcker5 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
你的保护色5 小时前
【无标题】
java·服务器·网络
basketball6166 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
淘矿人6 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
小江的记录本6 小时前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
来恩10037 小时前
请求转发与响应重定向的使用
java
@杰克成7 小时前
Java学习30
java·开发语言·学习
次元工程师!7 小时前
LangFlow开发(三)—Bundles组件架构设计(3W+字详细讲解)
java·前端·python·低代码·langflow
oddsand18 小时前
Redis网络模型
java·数据库·redis