2016-12-30 75 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我認爲很明顯)。你知道它是否會嘗試從我的所有緩存中檢索數據,但在收到第一個響應時返回結果,還是按順序檢查緩存?根據我希望他們使用的地區,我是否需要訂購我的緩存? –