2017-12-05 16 views
0

現在、私は春のアプリケーションで2つのキャッシュを維持しています。同じ値を指すキーがあるので、2つのキャッシュを使用します。したがって、最初のキャッシュには、中間キーへの私のキーの多対1のマッピングが含まれています。これらの中間鍵は、その後、実際の値セカンドキャッシュでの1対1にマッピングされている:2つのehcachesを1つにマージする方法

第一キャッシュ

KEY    A B C 
        \/ | 
Intermediate KEY Key1 Key2 

第二キャッシュ

Intermediate KEY Key1 Key2 
        |  | 
VALUE    Obj1 Obj2 

今、私がしたいです2つの異なるキーAまたはBに対して同じ値(Obj)を取得するには、最初に第1のキャッシュから中間キーを取得する必要があるため、2つのキャッシュを1つにマージすることで自分のソリューションを最適化します。

2つの異なるキーから2つのキャッシュと複製を保持せずに同じ値(Obj)を取得する方法はありますか。

+0

こんにちはムハンマドを私は理解することは非常に困難見つけたので、私はあなたの質問を編集しました。私はそれを正しく得たか? –

答えて

0

簡単なテストは、あなたがいる限りキャッシュ専用メモリ内に留まるように、異なるキーのためにそれを追加した場合にehcacheが同じ値にポイントをしていることを示しています

Cache<Integer, List> cache = cacheManager.getCache("cache", Integer.class, List.class); 

ArrayList<String> list = new ArrayList<String>(); 
list.add("Hello"); 

cache.put(1, list); 
cache.put(2, list); 

cache.get(1).add("World"); 

System.out.println(cache.get(2)); 
// prints [Hello, World] 

読むthis support ticket詳細については。

あなたのキャッシュをマージするには、あなたがこのような何か試すことができます。

Cache<Integer, Integer> first = cacheManager.getCache("1", Integer.class, Integer.class); 
Cache<Integer, List> second = cacheManager.getCache("2", Integer.class, List.class); 
Cache<Integer, List> merged = cacheManager.getCache("m", Integer.class, List.class); 

first.forEach(entry -> merged.put(entry.getKey(), 
            second.get(entry.getValue()))); 
関連する問題