如何在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
相关产品推荐
相关产品推荐

