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

如何在Spring Boot项目中同时使用内存缓存与Redis缓存?

Spring Boot 实现不同类使用不同缓存(内存/Redis)

核心思路

利用Spring Cache的多缓存管理器支持,通过指定缓存管理器或绑定缓存名称到对应配置两种方式,实现不同类分别使用内存缓存和Redis缓存。


方法一:在@Cacheable注解中直接指定缓存管理器

如果仅需部分方法或类单独指定缓存类型,可直接在@Cacheable中添加cacheManager参数,指定对应缓存管理器的Bean名称(需与自动配置的CacheManager Bean名称一致,比如内存缓存对应simpleCacheManager,Redis缓存对应redisCacheManager)。

示例:使用内存缓存的方法

@Cacheable(value = STATE_CACHE_NAME, 
           cacheManager = "simpleCacheManager",
           key = "#root.methodName + '-' + #country?.id ?: \"null\" + '-' + #stateName ?: \"null\"")
public Long getStateId(CountryEntity country, String stateName) {
    // 业务逻辑
}

示例:使用Redis缓存的方法

@Cacheable(value = STATE_CACHE_NAME, 
           cacheManager = "redisCacheManager",
           key = "#root.methodName + '-' + #country?.id ?: \"null\" + '-' + #stateName ?: \"null\"")
public Long getStateId(CountryEntity country, String stateName) {
    // 业务逻辑
}

方法二:类级别统一配置(@CacheConfig)

如果某个类下所有缓存方法都要使用同一种缓存,可在类上添加@CacheConfig注解统一指定缓存管理器,类内的@Cacheable方法会自动继承该配置。

示例:使用内存缓存的类

@CacheConfig(cacheManager = "simpleCacheManager")
public class LocalCacheService {

    @Cacheable(value = STATE_CACHE_NAME, 
               key = "#root.methodName + '-' + #country?.id ?: \"null\" + '-' + #stateName ?: \"null\"")
    public Long getStateId(CountryEntity country, String stateName) {
        // 业务逻辑
    }
}

示例:使用Redis缓存的类

@CacheConfig(cacheManager = "redisCacheManager")
public class RedisCacheService {

    @Cacheable(value = STATE_CACHE_NAME, 
               key = "#root.methodName + '-' + #country?.id ?: \"null\" + '-' + #stateName ?: \"null\"")
    public Long getStateId(CountryEntity country, String stateName) {
        // 业务逻辑
    }
}

方法三:配置文件绑定缓存名称到对应缓存类型

通过application.yml或application.properties,将特定缓存名称与内存/Redis缓存绑定,无需在注解中指定cacheManager,自动匹配对应缓存类型。

application.yml 配置示例

spring:
  cache:
    # 声明所有用到的缓存名称
    cache-names: state-cache, other-cache
    # 绑定指定缓存名称到Redis缓存
    redis:
      cache-names: state-cache
    # 绑定指定缓存名称到内存缓存
    simple:
      cache-names: other-cache

使用示例

// 自动使用Redis缓存
@Cacheable(value = "state-cache", 
           key = "#root.methodName + '-' + #country?.id ?: \"null\" + '-' + #stateName ?: \"null\"")
public Long getStateId(CountryEntity country, String stateName) {
    // 业务逻辑
}

注意事项

  • 确认自动配置的CacheManager Bean名称:Spring Boot中,内存缓存默认Bean为simpleCacheManager,Redis缓存默认Bean为redisCacheManager,可通过Spring上下文验证Bean名称是否正确。
  • 若自定义了缓存配置类,需确保对应的CacheManager Bean被正确注册并命名。

内容的提问来源于stack exchange,提问作者AlikElzin-kilaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:20:33