Spring 数据存储 Redis - 使用多个缓存
Spring Data Store Redis - Use Multiple Caches
我有一个由两个网络服务器、两个 redis 缓存和一个后端存储组成的应用程序。两个网络服务器和两个 redis 缓存位于西海岸和东海岸,以优化性能。到目前为止,我已经能够从我的网络服务器连接到我的第一个缓存,并连接到我的后端存储。但我正在寻找一种使用 Spring 将数据推送到两个 redis 缓存的方法。我已按如下方式配置我的两个 RedisManagers。
@Bean(name="CacheManager1")
public RedisCacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
redisCacheManager.setTransactionAware(true);
redisCacheManager.setLoadRemoteCachesOnStartup(true);
redisCacheManager.setUsePrefix(true);
return redisCacheManager;
}
@Bean(name="CacheManager2")
public RedisCacheManager cacheManager2() {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate2());
redisCacheManager.setTransactionAware(true);
redisCacheManager.setLoadRemoteCachesOnStartup(true);
redisCacheManager.setUsePrefix(true);
return redisCacheManager;
}
现在我已经尝试了一些随机的方法来缓存到这两个地方,但是这种特殊的方法失败了 "Cacheable is not a Repeatable Annotation"
@Cacheable(cacheManager = "CacheManager1", value = "activityProfile", key = "#id")
@Cacheable(cacheManager = "CacheManager2", value = "activityProfile", key = "#id")
public ActivityProfile findActivityProfile(String id) {
return activityProfileRepository.findOne(id);
}
有什么简单的方法可以使用 Spring 吗?
Dan Ciborowski - 看这里...
Spring 参考解释了如何组合多个 Spring Cache Abstraction 注释(例如 @Cacheable
、@CachePut
等)使用@Caching
.
因此对于可缓存,您可以执行以下操作。
@Caching(cacheable = {@Cacheable("CacheManager1"), @Cacheable("CacheManager2")})
public ActivityProfile findActivityProfile(String id) {
return activityProfileRepository.findOne(id);
}
我有一个由两个网络服务器、两个 redis 缓存和一个后端存储组成的应用程序。两个网络服务器和两个 redis 缓存位于西海岸和东海岸,以优化性能。到目前为止,我已经能够从我的网络服务器连接到我的第一个缓存,并连接到我的后端存储。但我正在寻找一种使用 Spring 将数据推送到两个 redis 缓存的方法。我已按如下方式配置我的两个 RedisManagers。
@Bean(name="CacheManager1")
public RedisCacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
redisCacheManager.setTransactionAware(true);
redisCacheManager.setLoadRemoteCachesOnStartup(true);
redisCacheManager.setUsePrefix(true);
return redisCacheManager;
}
@Bean(name="CacheManager2")
public RedisCacheManager cacheManager2() {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate2());
redisCacheManager.setTransactionAware(true);
redisCacheManager.setLoadRemoteCachesOnStartup(true);
redisCacheManager.setUsePrefix(true);
return redisCacheManager;
}
现在我已经尝试了一些随机的方法来缓存到这两个地方,但是这种特殊的方法失败了 "Cacheable is not a Repeatable Annotation"
@Cacheable(cacheManager = "CacheManager1", value = "activityProfile", key = "#id")
@Cacheable(cacheManager = "CacheManager2", value = "activityProfile", key = "#id")
public ActivityProfile findActivityProfile(String id) {
return activityProfileRepository.findOne(id);
}
有什么简单的方法可以使用 Spring 吗?
Dan Ciborowski - 看这里...
Spring 参考解释了如何组合多个 Spring Cache Abstraction 注释(例如 @Cacheable
、@CachePut
等)使用@Caching
.
因此对于可缓存,您可以执行以下操作。
@Caching(cacheable = {@Cacheable("CacheManager1"), @Cacheable("CacheManager2")})
public ActivityProfile findActivityProfile(String id) {
return activityProfileRepository.findOne(id);
}