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:标准化工厂
相关推荐
立莹Sir1 小时前
Spring Bean 生命周期详解
java·python·spring
uElY ITER1 小时前
Spring全家桶简介
java·后端·spring
lay_liu8 小时前
springboot 文件下载
java·spring boot·后端
Flittly8 小时前
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
java·笔记·spring·ai·springboot
workflower8 小时前
AI制造-推荐初始步骤
java·开发语言·人工智能·软件工程·制造·需求分析·软件需求
ACGkaka_10 小时前
SimpleDateFormat 线程安全问题及修复方案
java·jvm·安全
leo_messi9410 小时前
多线程(五) -- 并发工具(二) -- J.U.C并发包(八) -- CompletableFuture组合式异步编程
android·java·c语言
m0_3801138411 小时前
SpringBoot创建动态定时任务的几种方式
java·spring boot·spring
Gofarlic_OMS11 小时前
SolidEdge专业许可证管理工具选型关键评估标准
java·大数据·运维·服务器·人工智能