मैं एएचकेएच के सजावट SelfPopulatingCache
का उपयोग कर रहा हूं और जब कोई कैश नई प्रविष्टि लोड करने का प्रयास करता है तो कोई समस्या होती है, लेकिन यह अस्तित्वहीन नहीं है (यानी यह डेटाबेस में मौजूद नहीं है)। तो कैश किसी भी अन्य कुंजी को अनब्लॉक करने के लिए कैश में null
मान डाल देगा, लेकिन फिर अगला थ्रेड उसी डेटाबेस कॉल करेगा क्योंकि इसे कैश से 'शून्य' प्राप्त हुआ था। जिसका अर्थ है कि यह सोचता है कि प्रविष्टि को लोड करने की आवश्यकता है - भले ही वास्तविकता में यह शून्य है क्योंकि डेटा कहीं भी मौजूद नहीं है। मुझे लगता है कि मैं कुछ गलत कर रहा हूँ।Ehcache - डेटा मौजूद नहीं होने पर SelfPopulatingCache का उपयोग
(छद्म कोड)
Value v = cache.get(key); // multiple threads will block here
if (v == null)
cache.put(key, getValueFromDB()); // this might put a null value
मेरे वर्तमान समाधान रिक्त नहीं डाल करने के लिए, लेकिन एक प्लेसहोल्डर Object
रख दिया और यह जांच करने के लिए है।
Value v = cache.get(key);
if (v == null)
cache.put(key, getValueFromDB());
else if (v == NOENTRYOBJECT)
return null;
else
return v;
विचार?
मुझे स्पष्ट नहीं है कि आपका छद्म कोड 'SelfPopulatingCache' से कैसे संबंधित है। आप इसका उपयोग कैसे कर रहे हैं? – skaffman
कैश = SelfPopulatingCache (या BlockingCache) ... सोचा था कि बहुत स्पष्ट – Gandalf