是否可以使用带有Redis的Spring缓存抽象来创建多个缓存存储?
问题内容:
我正在使用Spring
MVC开发一个Web应用程序,并且正在使用带有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的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>
问题答案:
根据文档,RedisCacheManager默认情况下直接保存键,而无需附加前缀(缓存名称,用作名称空间)。要更改它并避免冲突,请将’usePrefix’设置为’true’:http
://static.springsource.org/spring-data/data-
redis/docs/current/api/org/springframework/data/redis/cache/RedisCacheManager
.html