2009-07-29 12 views
17

क्या वाइल्डकार्ड कुंजी के अनुसार memcache में प्रविष्टियों को अमान्य करने का कोई तरीका है?Memcache एक पैटर्न के अनुसार प्रविष्टियों को अमान्य कर दिया?

तो अगर मैं निम्नलिखित मेम्कैश कुंजी:

data/1 
data/2 
data/3 

वहाँ एक रास्ता मैं data/* की तरह कुछ के साथ उन कुंजियों को अमान्य कर सकता है? एक झुकाव में पुराने डेटा का एक गुच्छा साफ़ करना बेहद सहायक होगा।

उत्तर

23

सबसे अच्छा तरीका है जब आपके मेम्कैश कुंजी बनाने एक संस्करण कुंजी प्रदान करना है:

official wiki कि यह कैसे हल करने के लिए पर एक सुझाव है। हम अपने सिस्टम पर एक कुंजी बनाने के लिए एक समारोह/विधि प्रदान करके ऐसा करते हैं। शुरुआत में

5:monkeyInfo:123:456 

सूचना '5':

$var1 = 123; 
$var2 = 456; 
$cacheKey = makeKey('monkeyInfo', $var1, $var2, ...); 

makeKey() cacheKeyVersions सरणी और रिटर्न में दी गई जानकारी का उपयोग करता है। यह keyNames => संस्करणों की हार्ड-कोडेड सरणी से आता है। इसलिए यदि हम सिस्टम में प्रत्येक 'monkeyInfo' कैश मान को अमान्य करना चाहते हैं तो हमें सरणी में उस संख्या को 6 में बदलना होगा। एक ही फोन पर तब से के लिए

6:monkeyInfo:123:456 

नजर रखेंगे यहाँ कुंजी संस्करण सरणी दिखाई देती हैं इसका एक उदाहरण है। किसी भी दिए गए कुंजी के लिए संस्करण संख्या प्राप्त करने के लिए 'makeKey()' कॉल बस इस सरणी में दिखता है।

$cacheKeyVersions = array(
    'monkeyInfo' => 5, 
    'zebraInfo' => 2 
); 

आप कार्यान्वयन को अपनी आवश्यकताओं के अनुरूप बनाने के लिए सभी प्रकार की चीजें कर सकते हैं, लेकिन यह मूलभूत बात है।

+0

यह भी ध्यान रखें कि आपके मेककी फ़ंक्शन/विधि में एक वैश्विक संस्करण भी शामिल हो सकता है जो आपको आवश्यक होने पर पूरे कैश को फ़्लश करने की अनुमति देगा। या आप इसे कुंजी के विशिष्ट डोमेन फ्लश करने के लिए उपयोग कर सकते हैं, आदि। यह आपके ऊपर है। – conceptDawg

+0

कार्य को पूरा करने के लिए बहुत चालाक तरीका। अंतर्दृष्टि के लिए धन्यवाद। – Kekoa

+0

@ कॉन्सेप्टडॉग क्या आपके पास कोई पुस्तकालय है (अधिमानतः PHP) जो इस एल्गोरिदम को लागू करेगा? – romaninsh

5

memcached नामित डिलीट का समर्थन नहीं करता है।