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

如何为Hibernate二级缓存不同区域单独配置TTL?支持Java类配置吗?

针对Hibernate二级缓存(RedissonRegionFactory)的多区域TTL配置方案

一、通过application.properties/yml为单个缓存区域配置专属TTL

RedissonRegionFactory支持按缓存区域名单独配置属性,格式为spring.jpa.properties.hibernate.cache.redisson.${区域名}.expiration.time_to_live。示例如下:

# 全局默认TTL(未单独配置的区域将使用此值)
spring.jpa.properties.hibernate.cache.redisson.entity.expiration.time_to_live=10000
# 用户实体缓存区域专属TTL:30秒
spring.jpa.properties.hibernate.cache.redisson.entity_user.expiration.time_to_live=30000
# 订单实体缓存区域专属TTL:5分钟
spring.jpa.properties.hibernate.cache.redisson.entity_order.expiration.time_to_live=300000

注意:上述${区域名}需与实体类@Cacheable注解指定的region属性完全一致,比如:

@Entity
@Cacheable(region = "entity_user")
public class User {
    // 实体字段与方法
}

二、通过Java类自定义缓存区域配置

若需完全通过代码控制缓存规则,可自定义RedissonRegionFactory的配置逻辑,具体步骤如下:

步骤1:创建Redisson缓存配置类

import org.redisson.config.Config;
import org.redisson.hibernate.RedissonRegionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class HibernateRedissonCacheConfig {

    @Bean
    public RedissonRegionFactory redissonRegionFactory() {
        // 初始化Redisson基础连接配置(以单节点Redis为例)
        Config redissonConfig = new Config();
        redissonConfig.useSingleServer()
                .setAddress("redis://localhost:6379");

        // 定义各缓存区域的专属配置
        Map<String, org.redisson.hibernate.CacheConfig> cacheConfigs = new HashMap<>();
        
        // 用户缓存区域:TTL 30秒
        org.redisson.hibernate.CacheConfig userCacheConfig = new org.redisson.hibernate.CacheConfig();
        userCacheConfig.setTimeToLive(30000);
        cacheConfigs.put("entity_user", userCacheConfig);
        
        // 订单缓存区域:TTL 5分钟,最大空闲时间2分钟
        org.redisson.hibernate.CacheConfig orderCacheConfig = new org.redisson.hibernate.CacheConfig();
        orderCacheConfig.setTimeToLive(300000);
        orderCacheConfig.setMaxIdleTime(120000);
        cacheConfigs.put("entity_order", orderCacheConfig);
        
        // 全局默认缓存配置:TTL 10秒
        org.redisson.hibernate.CacheConfig defaultCacheConfig = new org.redisson.hibernate.CacheConfig();
        defaultCacheConfig.setTimeToLive(10000);
        
        // 绑定缓存配置到Redisson全局配置
        redissonConfig.getHibernateCacheConfig()
                .setCacheConfigs(cacheConfigs)
                .setDefaultCacheConfig(defaultCacheConfig);

        return new RedissonRegionFactory(redissonConfig);
    }
}

步骤2:指定使用自定义的RegionFactory

在application.properties中添加配置,让Hibernate使用自定义的缓存工厂:

spring.jpa.properties.hibernate.cache.region.factory_class=com.yourpackage.HibernateRedissonCacheConfig
# 若存在Redisson自动配置冲突,可排除自动配置类
# spring.autoconfigure.exclude=org.redisson.spring.starter.RedissonAutoConfiguration

步骤3:实体类绑定对应缓存区域

保持实体类上的@Cacheable注解指定对应区域名即可:

@Entity
@Cacheable(region = "entity_order")
public class Order {
    // 实体字段与方法
}

关键提示

  • Java配置的优先级高于application.properties配置
  • 未单独配置的缓存区域会自动使用全局默认TTL设置
  • 缓存区域名必须与实体类注解中的region值严格匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:40:42