복붙노트

[SPRING] redis로 Spring의 캐시 추상화를 사용하여 다중 캐시 저장소를 생성 할 수 있습니까?

SPRING

redis로 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. ==============================

    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

  2. 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