2011-02-03 9 views
11

मैं कुंजी/मान का एक बहुत memcached करने के लिए लिख रहा हूँ -> PREFIX_KEY1, PREFIX_KEY2, PREFIX_KEY3क्या उपसर्ग द्वारा Memcached कुंजी प्राप्त/खोजना संभव है?

मैं सभी चाबियाँ कि PREFIX_ साथ शुरू होता है

क्या यह संभव है प्राप्त करने की आवश्यकता?

उत्तर

18

क्षमा करें, लेकिन नहीं। Memcached एक हैशिंग एल्गोरिदम का उपयोग करता है जो स्पष्ट रूप से यादृच्छिक स्थानों पर कुंजी वितरित करता है, और इसलिए उन चाबियाँ पूरी तरह बिखरी हुई हैं। आपको उन्हें खोजने के लिए सबकुछ स्कैन करना होगा।

आपको यह भी पता होना चाहिए कि, डिज़ाइन द्वारा, memcached किसी भी कारण से किसी भी समय किसी भी कुंजी को छोड़ सकता है। यदि आप सामान डाल रहे हैं, तो आपको अवगत होना चाहिए कि आप इसे वापस आने पर निर्भर नहीं कर सकते हैं। यह मूल उपयोग केस, डेटाबेस पर हिट को कम करने के लिए कैश के लिए बिल्कुल ठीक है। लेकिन यदि आप इसके साथ कुछ और जटिल करना चाहते हैं तो यह एक गंभीर समस्या हो सकती है।

यदि ये सीमाएं एक समस्या है, तो मैं सुझाव दूंगा कि आप इसके बजाय रेडिस का उपयोग करें। यह memcached की तरह बहुत व्यवहार करता है, सिवाय इसके कि यह डेटा जारी रहेगा और यह आपको जटिल डेटा संरचनाओं को स्टोर करने देता है। तो आपके उपयोग के मामले में आप रेडिस में हैश स्टोर कर सकते हैं, फिर पूरे हैश को बाद में खींचें।

3

आप नेमस्पेस का उपयोग कर सकते हैं और आपको जो चाहिए वह कर सकते हैं। यहां एक PHP लाइब्रेरी है जो वही करती है। आप एकाधिक अनुप्रयोगों के लिए समान मेमकैड का उपयोग कर सकते हैं।

https://github.com/vijayabose/n_memcached

4

जबकि @btilly कि memcached कह में सही है यह मूल रूप से ऐसा नहीं करता है, तो आप इसे (काफी कुशलतापूर्वक) कुंजी है कि आपके उपसर्ग का हिस्सा के एक सूचकांक को बनाए रखने, तो आप सभी प्रविष्टियों को लाने के लिए अनुमति देकर अनुकरण कर सकते हैं जो एक निश्चित उपसर्ग से मेल खाता है।

स्पष्ट रूप से यह केवल विशिष्ट कुंजी के लिए काम करेगा जो आप पहले से चुनते हैं और मनमानी डेटा नहीं, लेकिन यदि आप उस सीमा के साथ रह सकते हैं तो यह काफी व्यावहारिक है। Memcache डेवलपर्स में से एक द्वारा a good article on this subject है।

3

एक त्वरित आदेश खोज करने के लिए करता है, तो एक विशेष कुंजी मौजूद है (कुंजी नाम एक "grep रेगुलर एक्सप्रेशन" हो सकता है)

for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done 
पर)
  • चर्चा पर आधारित है; | 'ANOTHERPREFIX * APREFIX * \' 40
  • 1 से स्लैब ग्रेप हिस्सा न भूलें
  • संबंधित मुद्दे