7

我正在使用 Spring MVC 开发一个 Web 应用程序,并且我正在使用 Spring 的缓存抽象和 Redis 来缓存我的数据库查询。但我无法使用@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 的 Spring bean 配置:

<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>
4

1 回答 1

8

根据文档,默认情况下 RedisCacheManager 直接保存键,而不附加前缀(缓存名称,充当命名空间)。要更改它并避免冲突,请将“usePrefix”设置为“true”:http ://static.springsource.org/spring-data/data-redis/docs/current/api/org/springframework/data/redis/cache/RedisCacheManager .html

于 2013-08-09T12:22:38.033 回答