2011-05-06 82 views
10

在ehcache的,加入到高速緩存元素時:ehcache的密鑰類型

cache.put(new Element("key1", "value1")); 

// Element constructors : 
Element(Object key, Object value) 

我看我可以給一個Object作爲密鑰索引。

我怎樣才能使用這個有一個「複雜」的鍵,由多個int:(userId,siteId,...)而不是一個字符串作爲索引?

感謝

+0

這是一個很好的問題。如何爲緩存或地圖製作多維關鍵字? @Bozho下面的答案或多或少是正確的,除了字符串concat。創建新對象所花費的時間會更少,並且它很可能會更小,因爲您沒有(粗略估計)該連接隱含的近5個字符串創建(userId to string,inline「:」,userId +的連接「: 「,siteId爲string,prev str + siteId str的新字符串concat)。 – 2011-05-06 10:19:00

回答

14

新一類把它包:

public class CacheKey implements Serializable { 
    private int userId; 
    private int siteId; 
    //override hashCode() and equals(..) using all the fields (use your IDE) 
} 

然後(假設您已經定義適當的構造函數):

cache.put(new Element(new CacheKey(userId, siteId), value); 

對於簡單的情況下,你可以使用字符串級聯:

cache.put(new Element(userId + ":" + siteId, value)); 
+0

字符串連接對我來說並不是最好的,因爲我需要儘可能小的內存大小(許多記錄)。使用'Serializable',我能夠擁有最輕/最短的密鑰嗎? EhCache將如何使用Key對象?謝謝 – 2011-05-06 09:24:20

+2

的大小不會是一個問題,不要擔心。 ehcache將得到對象的散列(因此你應該覆蓋包含所有字段的散列碼) – Bozho 2011-05-06 09:27:14

+0

對不起,但有必要實現'Serializable'? '可比較'是否足夠? – OldCurmudgeon 2012-11-06 17:10:21

相關問題