[SPRING] redis로 Spring의 캐시 추상화를 사용하여 다중 캐시 저장소를 생성 할 수 있습니까?
SPRINGredis로 Spring의 캐시 추상화를 사용하여 다중 캐시 저장소를 생성 할 수 있습니까?
스프링 MVC를 사용하는 웹 애플리케이션을 개발 중이며 Redis에서 Spring의 캐시 추상화를 사용하여 데이터베이스 쿼리를 캐시합니다. 하지만 @Cacheable을 사용하여 여러 캐시 저장소를 만들 수는 없습니다.
@Cacheable("acache")
public String atest(int i) {
return "a";
}
@Cacheable("bcache")
public String btest(int i) {
return "b";
}
...
...
String s = atest(1);
String r = btest(1);
redis를 사용하면 s와 r 모두 동일한 값 "a"를가집니다. 두 캐시를 다른 캐시에 캐시해도 효과가없는 것 같습니다.
그러나 이것은 Spring의 SimpleCacheManager를 사용할 때 잘 동작합니다.
Redis의 스프링 빈 설정 :
<cache:annotation-driven />
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:hostName="${redis.host-name}"
p:port="${redis.port}"
p:usePool="true"/>
<bean id="redisTemplate"
class="org.springframework.data.redis.core.RedisTemplate"
p:connectionFactory-ref="jedisConnectionFactory"/>
<bean id="cacheManager"
class="org.springframework.data.redis.cache.RedisCacheManager"
c:template-ref="redisTemplate">
</bean>
해결법
-
==============================
1.문서에 따르면 RedisCacheManager는 기본적으로 프리픽스 (네임 스페이스 역할을하는 캐시 이름)를 추가하지 않고 키를 직접 저장합니다. 이를 변경하고 충돌을 피하려면 'usePrefix'를 'true'로 설정하십시오. http://static.springsource.org/spring-data/data-redis/docs/current/api/org/springframework/data/redis/cache/RedisCacheManager .html
문서에 따르면 RedisCacheManager는 기본적으로 프리픽스 (네임 스페이스 역할을하는 캐시 이름)를 추가하지 않고 키를 직접 저장합니다. 이를 변경하고 충돌을 피하려면 'usePrefix'를 'true'로 설정하십시오. http://static.springsource.org/spring-data/data-redis/docs/current/api/org/springframework/data/redis/cache/RedisCacheManager .html
from https://stackoverflow.com/questions/18145372/is-it-possible-to-create-multiple-cache-stores-using-springs-cache-abstraction by cc-by-sa and MIT license