2016-12-30 58 views
1

我有一个由两个Web服务器,两个Redis缓存和一个后端存储组成的应用程序。两个Web服务器和两个Redis缓存位于西海岸和东海岸,以优化性能。到目前为止,我已经能够连接到我的第一个缓存,从我的Web服务器到我的后端存储。但我正在寻找一种使用Spring将数据推送到两个Redis缓存的方法。我已经配置了两个RedisManagers,如下所示。Spring Data Store Redis - 使用多个缓存

@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(cacheManager = "CacheManager1", value = "activityProfile", key = "#id") 
@Cacheable(cacheManager = "CacheManager2", value = "activityProfile", key = "#id") 
public ActivityProfile findActivityProfile(String id) { 
    return activityProfileRepository.findOne(id); 
} 

有没有使用任何简单的方法失败春天呢?

+0

如何配置一个CacheResolver,它将返回一个包含来自这两个缓存的列表?没有尝试过,但可以工作。请参阅示例[此处](https://jira.spring.io/browse/DATAREDIS-391?focusedCommentId=114319&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-114319) – eis

+0

您可以创建可能需要一系列cachemanagers的注释 –

+0

@ ObiWan-PallavJha我对此感兴趣......但是我对注释的体验是有限的。我开始创建新的注释,并让我的IDE为我自动生成一些项目。但是我不确定在哪里去实现逻辑,例如在set上设置两个缓存中的值。我开始在网上搜索有关如何制作注释的指南,但只是想知道您是否知道任何特别优秀的指南 –

回答

2

Dan Ciborowski - 在这里看到...

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#cache-annotations-caching

参考说明如何将(例如@Cacheable@CachePut等)使用@Caching多个组合Spring Cache Abstraction注解。

因此对于缓存,您可以执行以下操作。

@Caching(cacheable = {@Cacheable("CacheManager1"), @Cacheable("CacheManager2")}) 
    public ActivityProfile findActivityProfile(String id) { 
     return activityProfileRepository.findOne(id); 
    } 
+0

感谢您指引我到恰当的位置。但在阅读完细节后,我不清楚使用缓存两次会出现什么样的行为。 (Put和Evic我认为很明显)。你知道它是否会尝试从我的所有缓存中检索数据,但在收到第一个响应时返回结果,还是按顺序检查缓存?根据我希望他们使用的地区,我是否需要订购我的缓存? –