2016-12-30 8 views
1

2つのWebサーバー、2つのRedisキャッシュ、およびバックエンドストアで構成されるアプリケーションがあります。パフォーマンスを最適化するために、2つのWebサーバーと2つのRedisキャッシュが西海岸と東海岸に配置されています。これまで私は自分の最初のキャッシュ、Webサーバー、バックエンドストアに接続できました。しかし私は、Springを使って両方のキャッシュにデータをプッシュする方法を探しています。私は私のRedisManagersを次のように設定しました。 Springデータストア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

参照は@Cachingを(例えば@Cacheable@CachePut、など)を使用して複数にSpring Cache Abstraction注釈を結合する方法を説明します...こちらをご覧ください。

キャッシュ可能な場合は、次の操作を行うことができます。

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

私にちょうどいい場所を指摘してくれてありがとう。しかし、詳細を読んだあと、キャッシュ可能なものを2回使用することでどのような振る舞いが期待されるべきかはわかりません。 (PutとEvicは明白だと思います)。すべてのキャッシュからデータを取得して取得するかどうかはわかりますが、最初の応答が受信されたときに結果を返しますか、または順番にキャッシュをチェックしますか?私が使用したい地域に応じてキャッシュを別々に注文する必要がありますか? –

関連する問題