2009-09-04 12 views
5

मुझे यह जानना है कि क्या कोई वितरित कैश सिस्टम है जैसे memcached, वेग या साझा कैश जो मुझे सामग्री के नाम से अधिक सामग्री टैग करने की अनुमति देता है, या जो आइटम को एक दूसरे से जोड़ सकता है, इसलिए यदि मैं एक के लिए कैश को अमान्य करता हूं आइटम यह संबंधित वस्तुओं को भी अमान्य करता है।कोई वितरित कैश सिस्टम जो सामग्री टैगिंग की अनुमति देता है?

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

  • या क्या यह उन परियोजनाओं में से एक है जो विकसित होने के लिए भीख मांग रहे हैं? :)

संपादित करें: मैं asp.net

+0

मुझे भी इस मामले में दिलचस्पी होगी - अच्छा सवाल। –

उत्तर

0

वेग टैगिंग के लिए समर्थन है जहां प्रत्येक टैग एक स्ट्रिंग है। वस्तुओं को टैग द्वारा या एकाधिक टैग्स द्वारा पुनर्प्राप्त किया जा सकता है उदा। 'मसाला' और 'मुफ्त वितरण'।

हालांकि वेग पर निर्भरता के लिए कोई समर्थन नहीं है - आईआईआरसी वेग टीम ने कहा है कि निर्भरता v1 में नहीं होगी।

+1

शायद मैं वेग में देखूंगा, लेकिन मेरी हिम्मत मुझे बताओ कि memcache जाने का रास्ता है :) – possan

+0

मैं इसे समाधान के रूप में ध्वजांकित करूंगा। – possan

3

पर हूँ मुझे विश्वास है कि निर्भर डेटा को हटाने के memcached के cas (चेक-और-सेट) आपरेशन का उपयोग किया जा सकता है। प्रत्येक मान में एक अद्वितीय आईडी (धारावाहिक) होता है। प्रत्येक कुंजी के लिए, एक और key.dependents स्टोर करें, जिसमें डेटा का सीरियल है, और सभी आश्रितों की चाबियाँ हैं।

जब एक आश्रित को जोड़ने के लिए जा रहा है, कर

dependents, dep_serial = fetch(key+".dependents") 
data, serial = fetch(key) 
if serial != dependents[0]: 
    # somebody changed the actual data 
    start_over 
generate_and_cache_dependent(dep_key, data) 
dependents.append(dep_key) 
if not cas(dependents, dep_serial): 
    # somebody changed dependents 
    start_over # can avoid regenerating the data if they are still at serial 

जब एक आइटम प्राप्त नहीं हो,

dependents, dep_serial = fetch(key + ".dependents") 
serial = update(key, new_data) 
for dkey in dependents[1:]: 
    delete(dkey) 
dependents = [serial] 
if not cas(dependents, dep_serial): 
    start_over 

यहां तक ​​कि परस्पर विरोधी लेखन की उपस्थिति में करते हैं, इन एल्गोरिदम अंत में समाप्त हो जाएगी, क्योंकि एक लेखक होगा हमेशा "माध्यम से मिलता है"।

+0

दिलचस्प, मैं उसमें देख लूंगा! लेकिन मैं इसे सेट ('सेक्शन # 1', 'सेक्शन डेटा', 'आलेख # 1, आलेख # 2, आलेख # 3') पर हटाने के लिए वास्तव में पसंद करना चाहता हूं तो बस हटाने में सक्षम होना ('लेख 1'); और फिर जब मैं अगली बार सेक्शन 1 प्राप्त करने का प्रयास करता हूं तो इसे केवल पुन: उत्पन्न करना होगा, लेकिन यह संभवतः रेस-कंडीशन और कैश डेडलॉक्स बना सकता है, और वे मजाकिया नहीं हैं:/ – possan

0

निर्भरता लागू करना काफी कठिन है, लेकिन हो सकता है कि साझा कैश (http://www.sharedcache.com || http://sharedcache.codeplex.com) की सभी अन्य सुविधाएं कैशिंग के लिए आपकी आवश्यकताओं को पूरा करेंगी।

संबंध, रोनी

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

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