You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.x+Redisson二级缓存:如何配置Redis端TTL实现离线清理

问题解决:Spring Boot 3.x + Redisson二级缓存,Redis端自动过期配置

问题背景

使用Spring Boot 3.x搭配Redis与Redisson作为二级缓存,应用运行时功能正常,但停止后缓存条目因Redisson仅在客户端处理过期而永久留存。已在application.yml中配置TTL,但Redis端未设置TTL,需实现Redis端自动清理缓存(含哈希中单个条目),同时通过唯一hibernate.cache.region_prefix适配实体向后不兼容变更。

解决方案

可以通过调整Redisson配置,强制让Redis端管理缓存条目过期(包括哈希类型缓存的单个字段),无需依赖客户端定时任务。具体步骤如下:

1. 开启Redisson Redis原生过期支持

在application.yml的Hibernate配置中添加use_redis_expiration: true,让Redisson在存储缓存时直接在Redis端设置TTL:

spring:
    jpa:
        properties:
            hibernate:
                cache:
                    use_second_level_cache: true
                    region_prefix: ${DEPLOYMENT_ID:l2_cache} # 动态前缀,每个部署设唯一值
                    region:
                        factory_class: org.redisson.hibernate.RedissonRegionFactory
                    redisson:
                        entity:
                            expiration:
                                time_to_live: 20000
                                max_idle_time: 20000
                        fallback: true
                        config: redisson.yml
                        use_redis_expiration: true # 开启Redis端过期管理

2. 配置Redisson缓存区域的条目TTL

在redisson.yml中针对目标缓存区域(格式为region_prefix.region_name)配置单个哈希条目的过期时间,对应Redis的HEXPIRE操作:

# Redisson连接配置示例(根据实际环境调整)
singleServerConfig:
  address: "redis://localhost:6379"
  password: ""
  database: 0

# 缓存区域配置
cacheConfigs:
  "${DEPLOYMENT_ID:l2_cache}.someEntityCache": # 对应实体的region名+前缀
    entryTTL: 20000 # 哈希中每个实体条目的过期时间(毫秒)
    maxIdleTime: 20000
    useRedisKeyspaceNotifications: false # 关闭客户端通知监听,完全依赖Redis原生过期

3. 验证配置效果

应用重启并缓存实体后,通过Redis命令验证:

  • 查看哈希缓存的字段:HGETALL l2_cache.someEntityCache
  • 检查单个哈希条目的过期状态:可通过Redis客户端查看字段的过期属性,或使用HEXPIRE l2_cache.someEntityCache <实体ID> --check命令验证

关键说明

  • Redis端过期:开启use_redis_expiration后,Redisson会在存储每条缓存数据时,自动调用Redis的EXPIRE(普通键)或HEXPIRE(哈希字段)设置过期时间,应用停服后Redis会自动清理过期条目。
  • 部署隔离:通过${DEPLOYMENT_ID:l2_cache}动态设置region_prefix,每个部署使用唯一前缀,彻底避免实体结构变更导致的缓存脏数据问题。

内容的提问来源于stack exchange,提问作者BartoszMiller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:52:30