2014-06-20 74 views
0

我必須緩存大型字節數組。大多數情況下,字節數組的大小超出了基礎高速緩存服務可接受大小的最大大小。例如,Memcache只接受高達1MB的對象。
因此,我建議的方法是將大字節數組拆分成小號數組並分別緩存它們。 Furether更多,當請求關鍵字時,應該檢索所有緩存的字節數組。我在php中找到了一些方法。但沒有用於java實現。有沒有人在Java中做這樣的事情?請任何資源代碼剪斷。爲單個密鑰緩存多個字節數組

回答

1

您是否考慮將您的陣列拆分爲更小的並行區域並將每個部分緩存在專用密鑰下?當你想獲取一個數組時,只需將每個部分合併到一個數組中。

投入緩存:

String cacheKey = ...; 
int maxItems = 10000; 
int totalCount = myObjects.length; 
MyObject [] myObjects = ...; 
for (int i = 0; i < (totalCount/maxItems) + 1; i++) { 
    int endIndex = totalCount > (maxItems * (i + 1)) ? maxItems * (i + 1) : totalCount; 
    MyObject [] part = Arrays.copyOfRange(myObjects, i * maxItems, endIndex); 
    cache.put(cacheKey + i, part); 
} 

從緩存中獲取:

String cacheKey = ..' 
int partNr = 0; 
MyObject [] part; 
MyObject [] myObjects = new MyObject[0]; 
do { 
part = cache.get(cacheKey + partNr); 
partNr++; 
// from guava 
if (part != null) { 
    ObjectArrays.concat(myObjects, part, MyObject.class); 
} 
} while (part != null && part.length > 0) 

它可以通過Multiget的同時獲取所有零件,並使用多集把所有部件放入高速緩存立刻進行優化。

+0

感謝您的回答。但在我的情況下,我不能使用Object類'MyObject',因爲沒有任何引用類。只有字節數組可用。 –