我正在使用带有Redis的spring缓存进行缓存
我有以下方法:
@CachePut(value ="DATA1", key = "#key1")
public Object saveData1(long key1, Object obj) {
return obj;
}
@CachePut(value ="DATA2", key = "#key1")
public Object saveData2(long key1, Object obj) {
return obj;
}
这会导致密钥冲突,数据被覆盖。
我想生成附加了缓存名称的密钥。
赞:DATA1-key1,DATA2-key1。
有可能吗?
我看过几个使用类名和方法名的例子。但我想使用缓存名称。
谢谢。
答案 0 :(得分:3)
创建一个这样的自定义密钥生成器:
@Component("myKeyGenerator")
public class MyKeyGenerator implements KeyGenerator {
public Object generate(Object target, Method method, Object... params) {
String[] value = new String[1];
long key;
CachePut cachePut = method.getAnnotation(CachePut.class);
if (cachePut != null) {
value = cachePut.value();
}
key = (long) params[0];
return value[0] + "-" + key;
}
}
并使用如下:
@CachePut(value = "DATA1", keyGenerator = "myKeyGenerator")
我还没有测试过这个但是应该可以工作,至少你会知道如何去做。
答案 1 :(得分:0)
您需要在CacheManager bean中将参数“usePrefix”设置为true。这将在您的密钥中添加cacheName。
<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
...
<property name="usePrefix"><value>true</value></property>
...
</bean>