Spring KeyGenerator用于将密钥名称附加到密钥

时间:2017-02-27 12:00:53

标签: spring caching redis

我正在使用带有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。

有可能吗?

我看过几个使用类名和方法名的例子。但我想使用缓存名称。

谢谢。

2 个答案:

答案 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>