दुर्भाग्यवश नहीं। रेडिस के "कंटेनर" (यानी सूचियां, हैश, सेट और सॉर्ट किए गए सेट) प्रति सदस्य समाप्ति का समर्थन नहीं करते हैं, हालांकि अतीत में इस कार्यक्षमता का कई बार अनुरोध किया गया है।
हालाँकि, आप उस परिणाम को प्राप्त करने के लिए अपने स्वयं के तर्क को लागू कर सकते हैं। इसे संबोधित करने के लिए कई संभावित दृष्टिकोण हैं - यहां एक उदाहरण है। एक सेट का उपयोग करने के बजाय, एक क्रमबद्ध सेट (ZSET) का उपयोग करें और प्रत्येक सदस्य के स्कोर को युग के मूल्यों का उपयोग करके उसके समाप्ति समय पर सेट करें। उदाहरण के लिए लुआ स्क्रिप्ट का उपयोग करके इस प्रकार के वर्कफ़्लो को कार्यान्वित किया जा सकता है। सदस्यों को जोड़ने के लिए कुछ इस तरह का उपयोग करें:
redis.call('zadd', KEYS[1], os.time()+ARGV[1], ARGV[2])
और इसे अपने उदाहरण के अनुसार तर्क के रूप में '1 a 60 1' और '1 a 120 2' का उपयोग करके EVAL करें। सेट से आइटम को वास्तव में "समाप्त" करने के लिए, आपको उनका समय बीत जाने के बाद उन्हें हटाना होगा। आप ऐसा या तो एक आवधिक प्रक्रिया को लागू करके कर सकते हैं जो आपकी सूची को स्कैन करती है या उस तक पहुंचने पर। उदाहरण के लिए, निम्नलिखित लुआ का उपयोग सदस्यों की समय सीमा समाप्त करने के लिए किया जा सकता है:
redis.call('zremrangebyscore', KEYS[1], '-inf', os.time())
और अपने उदाहरण के अनुसार तर्क के रूप में '1 a' का उपयोग करके इसे EVAL करें।
संपादित करें:पायथन का उपयोग करके उपरोक्त को कैसे प्राप्त करें
import time
import redis
def add(r, key, ttl, member):
r.zadd(key, member, int(time.time()+ttl))
def expire(r, key):
r.zremrangebyscore(key, '-inf', int(time.time()))
...
r = redis.Redis()
add(r, 'a', 1, 60)
add(r, 'a', 2, 120)
# periodically or before every operation do
expire(r, 'a')