[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比

简介: 本文深度对比调度模块中Redis原生锁与Redisson锁:前者轻量但功能简陋(无重入、无阻塞),需手动续期;后者支持可重入、自动看门狗续期、阻塞等待,API友好但依赖较重。结合场景选型更可靠。(239字)

[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比

摘要

同一个调度框架内同时提供了基于 Redis 原生命令的锁服务和基于 Redisson 的锁服务。本文从功能特性、使用复杂度、可靠性角度对比两者的差异,并给出选型建议。

1. 锁获取方式

框架 非阻塞尝试 阻塞等待 可重入
RedisLockService ❌(仅 try once)
RedissonReentrantLockService tryLock(waitTime)
RedissonBlockLockService lock() 永久阻塞
  • Redis 原生锁SET NX PX 原子操作,仅尝试一次,失败立即返回。适合对延迟敏感且锁竞争不激烈的场景。
  • Redisson 可重入锁:支持等待超时,可重入,解决同一线程多次获取锁的死锁问题。
  • Redisson 阻塞锁:会一直阻塞直到获取锁,适合必须确保执行的任务(但需警惕死等)。

2. 自动续期机制

  • Redis 原生自动续期:框架自己启动 ScheduledThreadPoolExecutor,每隔 5 秒执行 Lua 脚本续期。需要额外管理线程池生命周期,且续期不及时可能导致锁提前释放。
  • Redisson 看门狗:内置 netty 定时任务,默认 30 秒检查一次,只要锁还被当前线程持有且任务未完成,自动续期。实现更健壮,无需手动管理。

3. 故障恢复

  • Redis 原生:若持有锁的节点宕机,续期线程消失,锁会在原租期后自动释放,相对安全。
  • Redisson:同样会过期释放,但看门狗在节点宕机后也会停止,锁最终过期释放。

4. 使用复杂度

  • Redis 原生:需要自己管理 RedisTemplate、Lua 脚本、续期线程池,代码量较大但依赖少。
  • Redisson:只需注入 RedissonClient,调用 getLock() 即可,API 更友好,但引入额外依赖。

5. 选型建议

场景 推荐方案
轻量应用,不想引入 Redisson RedisLockService + 固定租期或自动续期
需要可重入、看门狗自动续期 RedissonReentrantLockService
任务必须执行,允许阻塞等待 RedissonBlockLockService(注意设置合理的租期避免死锁)
目录
相关文章
|
消息中间件 Java Kafka
Spring Boot集成Kafka动态创建消费者与动态删除主题(实现多消费者的发布订阅模型)
Spring Boot集成Kafka动态创建消费者与动态删除主题(实现多消费者的发布订阅模型)
18363 1
Spring Boot集成Kafka动态创建消费者与动态删除主题(实现多消费者的发布订阅模型)
|
2月前
|
前端开发 Java API
[049][Crypto模块]前后端混合加密API实战:基于Spring Boot的AES+RSA安全传输方案
本文详解Spring Boot中AES+RSA混合加密实战:前端用RSA公钥加密随机AES密钥并传输,后端通过`@Crypto`注解自动解密请求体。涵盖公钥分发、Hex/Base64编码统一、ECB模式适配及Caffeine缓存优化,提供开箱即用的端到端安全传输方案。(239字)
254 0
|
4月前
|
运维 Java 开发者
[015][web模块]基于Spring Boot的HTTP客户端日志与默认配置实战
本文详解基于Spring Boot的HTTP客户端统一配置方案,支持RestTemplate、RestClient与WebClient三种客户端,实现无侵入的日志记录(请求/响应头、状态码)、默认请求头注入(如X-Request-Id)、非2xx异常自动转换及链路追踪支持,全部通过Customizer与Filter机制自动装配,开箱即用,提升微服务调用可观测性与开发效率。(239字)
356 5
[015][web模块]基于Spring Boot的HTTP客户端日志与默认配置实战
|
4月前
|
缓存 运维 Java
[014][web模块]构建可重复读取的请求体:Spring Boot 请求缓存过滤器设计与实现
本文介绍Spring Boot中实现可重复读取请求体的缓存过滤器方案,通过`HttpServletRequestWrapper`包装、内存缓存与条件过滤,解决流式请求体只能读一次的痛点,支持日志、验签等多场景复用,具备自动配置、长度限制、路径匹配等特性,轻量透明,开箱即用。(239字)
212 1
|
4月前
|
缓存 安全 搜索推荐
[004][缓存模块]Caffeine缓存自定义:构建灵活的Spring Boot缓存管理器
本文介绍Spring Boot中Caffeine缓存的灵活定制方案:通过自定义`FlexibleCaffeineCacheManager`,支持按缓存名(如users/products)独立配置过期策略、容量等参数,兼顾全局默认与个性化需求;结合线程安全创建器、属性合并机制及无缝Spring集成,实现高性能、易扩展、零侵入的本地缓存管理。(239字)
249 2
|
4月前
|
缓存 NoSQL 算法
【Redis】Redis——过期键删除策略、内存淘汰8种策略、LRU/LFU实现
Redis过期删除与内存淘汰是两大核心内存管理机制:前者按TTL自动清理失效键(惰性+定期组合),后者在`maxmemory`超限时主动淘汰键(8种策略,含LRU/LFU近似实现)。二者目标、触发条件与作用范围截然不同,需精准区分与配置。
|
4月前
|
缓存 NoSQL Java
[006][缓存模块] 两级缓存实战:基于 Caffeine + Redis 的多级缓存设计与实现
本文介绍基于Caffeine(本地)+ Redis(分布式)的两级缓存实战方案,通过自定义`MultiLevelCache`与`MultiLevelCacheManager`,实现Spring Cache标准接口下的透明多级缓存:读优先本地(纳秒级)、未命中查Redis并回填;写同步更新两级,兼顾高性能与数据共享。代码开源可直接集成。
380 0
|
5月前
|
XML 安全 Java
【SpringSecurity新手村系列】(5)RBAC角色权限与账户状态校验
本章在数据库认证基础上,通过 RBAC 三表(用户-角色-权限)把角色与权限从数据库接入 Spring Security,并补齐账户状态字段(过期、锁定、启用等),实现“可登录 + 可授权 + 可控状态”的完整认证闭环。
329 4
|
5月前
|
JSON 安全 Java
【SpringSecurity新手村系列】(6)基于角色的权限控制、权限拦截注解与自定义无权限页面
本章在 RBAC 角色体系上,开启 @EnableMethodSecurity,使用 @PreAuthorize 配合 hasRole / hasAnyRole 实现 Controller 方法级拦截,并配置自定义 403 无权限页面,重点拆解 ROLE_ 前缀重复拼接的常见坑位。
463 1
|
5月前
|
安全 前端开发 搜索推荐
【SpringSecurity新手村系列】(3)自定义登录页与表单认证
自定义登录页与表单认证本文围绕自定义登录页展开,详解 formLogin、loginProcessingUrl 与跳转配置,重点解释 CSRF 隐藏域的作用、校验原理及常见错误,帮助你稳定完成表单登录改造。
325 6

热门文章

最新文章