Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

रेडिस सूचनाएं:समाप्ति पर कुंजी और मूल्य प्राप्त करें

एली ने जिस फीचर से लिंक किया है वह आपको एक कुंजी की समय सीमा समाप्त होने पर सुनने की अनुमति देता है। हालांकि, यह आपको कुंजी का मूल्य नहीं देता है। फ़्यूथरमोर, दायर जीथब मुद्दे के आधार पर ऐसा नहीं लगता है कि आप इस सुविधा को कभी भी जल्द ही (https://github.com/antirez/redis/issues/1876) बनाने की उम्मीद कर सकते हैं। मैं जिस समाधान का उपयोग करता हूं वह एक विशेष "छाया" समाप्ति कुंजी बनाना है जो उस कुंजी से जुड़ी हुई है जहां आपके पास वास्तविक मूल्य है।

तो मान लें कि आपके पास testkey . नामक एक कुंजी है और इसका पूर्णांक मान 100 . है . इसके अलावा, कुंजी 10 सेकंड के बाद समाप्त हो जाएगी जिस बिंदु पर आप कुंजी का मान प्राप्त करना चाहते हैं। (हो सकता है कि आप 10 सेकंड के दौरान कुंजी को बढ़ा रहे थे)।

सबसे पहले आपको कीस्पेस ईवेंट सुनने के लिए सेटअप करना होगा। विशेष रूप से आप expired . के लिए सुनना चाहते हैं आयोजन। आप इसे अपने कॉन्‍फ़िगरेशन से कर सकते हैं या config set . का उपयोग कर सकते हैं रेडिस में कमांड। (अधिक जानकारी के लिए यहां देखें:http://redis.io/topics/notifications)

CONFIG SET notify-keyspace-events Ex

अब आप एक विशेष keyevent . की सदस्यता ले सकते हैं चैनल जहां आपको सूचित किया जाएगा कि कुंजी समाप्त हो गई है।

SUBSCRIBE [email protected]__:expired

सदस्यता लेने के लिए चैनल का प्रारूप है [email protected]<db>__:<eventName> . हमारे उदाहरण में हम मान रहे हैं कि हम डिफ़ॉल्ट डेटाबेस 0 के साथ काम कर रहे हैं और हम expired को सुनना चाहते हैं घटना।

जब testkey समाप्त होने पर अब आपको __keyevent__ . में एक संदेश प्राप्त होगा चैनल जहां संदेश उस कुंजी का नाम है जो समाप्त हो गई है। बेशक इस बिंदु पर कुंजी चली गई है इसलिए हम अब मूल्य तक नहीं पहुंच सकते हैं! समाधान एक विशेष समाप्ति कुंजी का उपयोग करना है।

जब आप अपनी testkey बनाते हैं एक विशेष समय समाप्त होने वाली "छाया" कुंजी भी बनाएं (वास्तविक testkey . को समाप्त न करें ) उदाहरण के लिए:

SET testkey 100
SET shadowkey:testkey "" EX 10

अब [email protected]__:expired . में चैनल आपको एक संदेश मिलेगा जो आपको बताएगा कि कुंजी shadowkey:testkey खत्म हो चुका। संदेश का मान लें (जो कि कुंजी का नाम है), कोलन पर विभाजित करें (या जो भी विभाजक आप उपयोग करने का निर्णय लेते हैं), और फिर मैन्युअल रूप से कुंजी का मान प्राप्त करें और इसे हटा दें।

// set your key value
SET testkey 100 
//set your "shadow" key, note the value here is irrelevant
SET shadowkey:testkey "" EX 10 
// Get an expiration message in the channel [email protected]__:expired
// Split the key on ":", take the second part to get your original key
// Then get the value and do whatever with it
GET testkey
// Then delete the key
DEL testkey

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. कमांड लाइन के माध्यम से हरोकू रेडिस से सुरक्षित रूप से कैसे जुड़ें?

  2. क्या हाइबरनेट-रेडिस विभिन्न हाइबरनेट उदाहरणों द्वारा साझा किए गए दूसरे स्तर के कैश का समर्थन करता है

  3. रेडिस क्लस्टर / लोड संतुलन

  4. रेडिस स्टोर (या कोई डेटाबेस?) लॉक मैकेनिज्म (NodeJS)

  5. निष्पादन का रेडिस पाइपलाइन आदेश