How to use in memory and redis cache in the same project?

116 views Asked by At

Have two classes, both annotating with @Cacheable (org.springframework.cache.annotation.Cacheable), either methods or class. I think it doesn't matter for this question.

Example:

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

In some classes I'd like to use the simple in-memory cache and others the Redis cache. Both are configured in Spring boot auto-configure CacheConfigurations. How do I state this intent and use the different configurations?

1

There are 1 answers

3
David Gomes On

@Cacheable takes a parameter "cacheManager", which lets you specify which bean of CacheManager it refers to.

So you'd add it with the name of the bean of your wanted CacheManager.

@Cacheable(cacheManager = "inMemoryCache", value = STATE_CACHE_NAME, key = "#root.methodName + '-' + #country?.id ?: \"null\" + '-' + #stateName ?: \"null\"")
public Long getStateId(CountryEntity country, String

You can either use the name of the bean method, or provide the name via the "name" parameter of @Bean.

E.g.

@Bean(name = "inMemoryCache")
CacheManager cacheManager() {
}