2014-03-24 31 views
-1

對於許多java服務,我們使用AWS ElastiCache作爲由Spring Cache抽象和spymemcached集成的分佈式緩存。Spring Cache:將memcached用作分佈式緩存

在一個服務中,我看到我得到的結果不同於我的預期結果,導致ClassCastException。準確地說:我有一個緩存鍵,因此我期望一個List,但是我得到Type2的結果。

我們已經確定了一些緩存,某些使用相同的緩存鍵:

Cache1: 
cacheKey -> List<Type1> 

Cache2: 
cacheKey -> Type2 

由於他們在不同的緩存,這作品時,我們使用一個簡單的HashMap基於緩存。有了ElastiCache/Memcached,但是看起來我們並沒有真正的不同緩存(這對於我所知道的memcached來說是有意義的 - 這不是很多)。我希望spymemcached通過操作緩存鍵來處理這個問題,這樣應用程序就不需要知道實際的緩存實現了(這可以通過操作緩存鍵並在緩存名前面加前綴來完成)。

從幾個調試會話和我看到的錯誤來看,似乎並非如此。

我特意看了一下這個類:

com.google.code.ssm.spring.SSMCache

L82: value = cache.get(getKey(key), null); 
L154: private String getKey(final Object key) { 
L155: return key.toString(); 
L156: } 

我本來期望有信息getKey()方法用一個前綴緩存名稱。

所以我的問題是:

  1. 我是否理解正確的是怎麼回事呢?
  2. 是否有可以使用spymemcached進行配置以使其按預期方式運行的功能?

此外,任何其他的想法appriciated!謝謝!

+0

什麼是你回來的'Type2',它與原始的'Type1'和'List'有什麼關係?什麼是(Cache1)和Cache2(的實現),它們的設置是什麼? –

+0

Type1和Type2只是POJO,它們沒有直接關係。配置是最小的(一些到期時間)... –

+0

對我來說,它說某事正在使用相同的鍵存儲不同(類型)的數據。這是分佈式緩存的不正確使用。 –

回答