在ehcache的,加入到高速緩存元素時:ehcache的密鑰類型
cache.put(new Element("key1", "value1"));
// Element constructors :
Element(Object key, Object value)
我看我可以給一個Object
作爲密鑰索引。
我怎樣才能使用這個有一個「複雜」的鍵,由多個int:(userId,siteId,...)
而不是一個字符串作爲索引?
感謝
在ehcache的,加入到高速緩存元素時:ehcache的密鑰類型
cache.put(new Element("key1", "value1"));
// Element constructors :
Element(Object key, Object value)
我看我可以給一個Object
作爲密鑰索引。
我怎樣才能使用這個有一個「複雜」的鍵,由多個int:(userId,siteId,...)
而不是一個字符串作爲索引?
感謝
新一類把它包:
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));
字符串連接對我來說並不是最好的,因爲我需要儘可能小的內存大小(許多記錄)。使用'Serializable',我能夠擁有最輕/最短的密鑰嗎? EhCache將如何使用Key對象?謝謝 – 2011-05-06 09:24:20
的大小不會是一個問題,不要擔心。 ehcache將得到對象的散列(因此你應該覆蓋包含所有字段的散列碼) – Bozho 2011-05-06 09:27:14
對不起,但有必要實現'Serializable'? '可比較
這是一個很好的問題。如何爲緩存或地圖製作多維關鍵字? @Bozho下面的答案或多或少是正確的,除了字符串concat。創建新對象所花費的時間會更少,並且它很可能會更小,因爲您沒有(粗略估計)該連接隱含的近5個字符串創建(userId to string,inline「:」,userId +的連接「: 「,siteId爲string,prev str + siteId str的新字符串concat)。 – 2011-05-06 10:19:00