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 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里4 天前
java中的继承和多态的区别
java
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕4 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖4 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时4 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang4 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi4 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号4 天前
java函数式编程--入门基础
java·编程·函数式编程