2012-05-20 13 views
8

जब मैं अपने रेडिस संग्रह में कोई बदलाव करता हूं तो मैं कॉलबैक चलाने में सक्षम होना चाहता हूं। कॉलबैक इनपुट के रूप में कुंजी और मूल्य ले जाएगा। क्या ऐसा कुछ संभव है?Redis में बदलाव के लिए सुनो?

धन्यवाद?

+0

संबंधित सुविधा का अनुरोध: https://github.com/antirez/redis/issues/83 –

उत्तर

8

तुम भी एक दास सिंक आदेश का उपयोग कर की तरह Redis सर्वर से कनेक्ट कर सकते हैं। त्वरित परिचय के लिए Redis Replication Works? कैसे देखें।

सिंक आदेश के उत्पादन में दो चरणों है। पहले चरण में, सर्वर डेटाबेस dump.rdb फ़ाइल देता है। एक बार फ़ाइल भेजी जाने के बाद, यह रेडिस प्रोटोकॉल में कमांड भेजना शुरू कर देता है, जो कि एओएफ प्रारूप भी है।

यहाँ आप क्या कर सकते हैं के उच्च स्तर तस्वीर है:

  1. कनेक्ट Redis सर्वर से और SYNC आदेश
  2. सहेजें जारी करने और dump.rdb फ़ाइल को पार्स। प्रारंभिक डेटा सेट बनाएँ। node.js based rdb parser उपलब्ध है
  3. अनुसरण करने वाले आदेशों को पार्स करें। चूंकि वे रेडिस प्रोटोकॉल में हैं, इसलिए आप मौजूदा रेडिस लाइब्रेरी से शुरू कर सकते हैं।
  4. हर आदेश आप प्राप्त के लिए, एक कॉलबैक

यह बहुत काम लगता आह्वान है, लेकिन आप बहुत आसानी से इस हैक करने में सक्षम होना चाहिए। और यह भी एक अच्छी ओपन सोर्स लाइब्रेरी बना देगा!

संपादित करें: सिंक v/s मॉनिटर

  1. Monitor एक डिबगिंग आदेश है। प्रतिक्रिया प्रारूप समय के साथ (डी) बदल सकता है (डी)। Sync मास्टर के लिए प्रयोग किया जाता है -> दास प्रतिकृति है, और इसलिए बेहतर समर्थन किया जाएगा
  2. Monitor सभी आदेशों का उत्सर्जन करेंगे, जिनमें केवल पढ़ने के लिए आदेश देता है। Sync केवल आपको आदेश देगा जो डेटा को संशोधित करेगा।
  3. Monitor व्यक्ति आदेशों एक lua स्क्रिप्ट के भीतर क्रियान्वित कर रहे हैं प्रवेश करेंगे।Sync केवल पूरे लुआ स्क्रिप्ट को स्थानांतरित करेगा, इसलिए आपको स्क्रिप्ट को स्वयं पार्स करना होगा। यह वास्तव में sync के लिए एक सौदा ब्रेकर है।
  4. Monitor उन आदेशों को लॉग करेगा जो सफल नहीं हुए, Sync केवल डेटा को संशोधित करने वाले आदेशों को लॉग करेगा। उदाहरण के लिए, कमांड del non-existing-key मॉनीटर द्वारा लॉग किया जाएगा लेकिन जब आप सिंक चलाते हैं तो दिखाई नहीं देंगे।
+0

धन्यवाद श्रीपति! क्या आप मुझे अपडेट के लिए मॉनिटर का उपयोग कर बनाम इस का एक उच्च स्तरीय अवलोकन दे सकते हैं? – fancy

+1

@fancy मेरे उत्तर के अपडेट देखें –

10

दो विकल्प:

  1. उपयोग MONITOR आदेश - यह हर आदेश है कि Redis के लिए हो जाता है निशान और आप का विश्लेषण और यह देखने के अपने संग्रह को छुआ जा रहा है कर सकते हैं।

  2. आप "के मालिक हैं" कोड है कि संग्रह के लिए लिखते हैं, अपने अन्य कोड (अपने कॉलबैक) का संकेत है। इसके लिए आप Redis Pub/Sub चैनल का उपयोग कर सकते हैं।

संपादित Redis वास्तव में संस्करण 2.8 में इस सुविधा को लागू करने जा रहा है। एंटीरेज़ के ब्लॉग पोस्ट को इस पर देखें: Redis keyspace changes notification system

+0

@fancy मेरा उत्तर के अद्यतन देखने –

3

संक्षिप्त उत्तर - नहीं।

थोड़ा लंबा जवाब - आप यह कर केवल यदि आप अपने ग्राहक में redis पबसब में किसी विशिष्ट चैनल को प्रकाशित करने जोड़ सकते हैं। या उपयोगकर्ता मॉनिटर रेडिस में जो कुछ भी चल रहा है उसे पार्स करने के लिए, लेकिन अगर वह प्रक्रिया रेडिस से कनेक्शन खो देती है - तो आप खराब हो जाते हैं।

0
<dependency> 
    <groupId>com.moilioncircle</groupId> 
    <artifactId>redis-replicator</artifactId> 
    <version>2.5.0</version> 
</dependency> 

आप जावा का उपयोग कर रहे हैं। redis-replicator रेडिस प्रतिकृति प्रोटोकॉल लागू करता है। अधिक जानकारी references

0

का संदर्भ लें 2017

में अब एक प्रकाशित करें/सदस्यता लें व्यवस्था है जिसके आप node-redis मॉड्यूल के साथ उपयोग कर सकते हैं। विशिष्ट दस्तावेज HERE देखें। (परीक्षण के लिए redis-mock के साथ भी काम करता है)

आपके पास एक ही चैनल में कई ग्राहक (श्रोताओं) हो सकते हैं, जो आपके मामले में आपके संग्रह की कुंजी होगी।

त्वरित नमूना: (कार्यान्वयन विवरण के लिए दस्तावेज़ ऊपर देखें)

sub.subscribe('myCollection'); 
sub.on('message', (channel, data) => { 
    // this is the callback you talked about 
    console.log(`${channel} is now ${data}`); 
}); 

// ... later on ... 

pub.publish('myCollection', [1,2,3]) 
// console will output: 
// myCollection is now [1,2,3] 
संबंधित मुद्दे