@ Cacheable#cacheNames与Redis无关吗?

时间:2019-06-24 07:48:27

标签: spring spring-data-redis

我对我的服务进行了以下注释

@Cacheable(cacheNames = {"some"},
           key = "{#req.some, #req.other, #req.property}")
public List<Some> listSome(SomeReq req) {
    ..
}

看来工作正常,我通过Medis看到了这些钥匙。 (couponspring.cache.redis.key-prefix的值。)

coupon{Some},{Other},{Property}
coupon{Some},{Other},{Property}
coupon{Some},{Other},{Property}
coupon{Some},{Other},{Property}
coupon{Some},{Other},{Property}
coupon{Some},{Other},{Property}

cacheNames在哪里起作用?

如果我添加其他具有相同键模式的服务方法,是否可能发生冲突?

@Cacheable(cacheNames = {"someOther"},
           key = "{#req.some, #req.other, #req.property}")    
List<SomeOther> listSomeOthers(SomeOtherReq req) {
} 

2 个答案:

答案 0 :(得分:1)

  

如果我添加其他具有相同键模式的服务方法,是否可能发生冲突?

否,因为cacheNames是(类似)命名空间,因此您可以在不同的命名空间中使用相同的键。

答案 1 :(得分:1)

我正在回答自己的问题,以寻求进一步的帮助。

简而言之,我需要为RedisCacheManager定义一个bean,以使cacheNames起作用。

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
    final RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory)
            .cacheDefaults(defaultCacheConfig())
            .build();
    return cacheManager;
}

如您所见,defaultCacheConfig()中我没有进行任何更改。

键的属性以{cacheName}::为前缀。