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