2011-05-06 9 views
10

ehcache, जब कैश करने के लिए कोई तत्व जोड़ में:ehcache कुंजी प्रकार

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

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

मैं देख रहा हूँ मैं कुंजी सूचकांक के रूप में एक Object दे सकते हैं।

मैं इंडेक्स के रूप में एक स्ट्रिंग के बजाय एकाधिक int: (userId,siteId,...) से बना "जटिल" कुंजी रखने के लिए इसका उपयोग कैसे कर सकता हूं?

धन्यवाद

+0

यह एक अच्छा सवाल है। कैश या मानचित्र के लिए आप बहु-आयामी कुंजी कैसे बनाते हैं। स्ट्रिंग कॉन्सट को छोड़कर @ बोझो के नीचे का जवाब कम या ज्यादा सही है। आप नई ऑब्जेक्ट का निर्माण करने में कम समय जलाएंगे और यह संभवतया छोटा होगा क्योंकि आपके पास उस कंसटेनेशन (प्रयोक्ता आईडी, स्ट्रिंग, इनलाइन ":", उपयोगकर्ता आईडी + का समामेलन) द्वारा लगभग 5 स्ट्रिंग रचनाएं पूरी तरह से होंगी (अनुमानित) ", स्ट्रिंग करने के लिए साइट, पिछली str + siteId str की नई स्ट्रिंग concat)। –

उत्तर

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); 

साधारण मामलों आप स्ट्रिंग का उपयोग कर सकते concatenation:

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

स्ट्रिंग कॉन्सटेनेशन मेरे लिए सबसे अच्छा नहीं है क्योंकि मुझे सबसे कम मेमोरी आकार की आवश्यकता है (कई रिकॉर्ड)। 'Serializable' के साथ, क्या मैं सबसे हल्का/सबसे छोटा कुंजी संभव हो सकता हूं? EhCache कुंजी ऑब्जेक्ट का उपयोग करने जा रहा है? धन्यवाद –

+2

आकार कोई मुद्दा नहीं होगा, चिंता न करें। ehcache ऑब्जेक्ट का हैश प्राप्त करेगा (इसलिए आपको शामिल सभी फ़ील्ड के साथ हैशकोड ओवरराइड करना चाहिए) – Bozho

+0

पुनरुत्थान के लिए खेद है, लेकिन क्या यह 'Serializable' को लागू करना आवश्यक है? क्या तुलनात्मक पर्याप्त होगा? – OldCurmudgeon

संबंधित मुद्दे