2013-06-12 5 views
37

के लिए टीटीएल क्या रेडिस में एक विशिष्ट कुंजी के लिए टीटीएल (रहने का समय) सेट करना संभव है, लेकिन एक सेट के लिए सदस्य के लिए?एक सेट सदस्य

मैं रेडिस दस्तावेज द्वारा प्रस्तावित टैग के लिए एक संरचना का उपयोग कर रहा हूं - डेटा सरल कुंजी-मूल्य जोड़े हैं, और टैग प्रत्येक टैग के अनुरूप कुंजी युक्त सेट हैं, उदाहरण के लिए

> SETEX id:id_1 100 'Lorem ipsum' 
OK 
> SADD tag:tag_1 id:id_1 
(integer) 1 

कुंजी id:id_1 अपेक्षा के अनुरूप समाप्त हो जाएगा, लेकिन मैं tag:tag_1 सेट से संवादी सदस्य को हटाने के लिए एक कारगर तरीका नहीं दिख रहा।

एक तरह से मैं आया था एक क्रॉन नौकरी का उपयोग एक स्क्रिप्ट युक्त है जो समय-समय पर सेट से कालबाह्य कुंजी को हटा देगा - सभी टैग नामों को किसी अन्य सेट में जोड़कर और फिर सभी टैग के माध्यम से पुनरावृत्ति करके, फिर प्रत्येक के अनुरूप सभी आईडी टैग करें और जांचें कि क्या संबंधित कुंजी मौजूद है - यदि नहीं, तो SREM पर कॉल करें।

मुझे नहीं लगता कि यह एक प्रभावी तरीका होगा और मैं संभवतः टैग को यथासंभव स्वच्छ रखना चाहूंगा, क्योंकि सेट का आकार शायद कई टैग (SINTER) द्वारा खोज के प्रदर्शन को प्रभावित करेगा। क्या कोई और "आंतरिक" तरीका है?

उत्तर

15

सूची, सेट, या जेएससेट में आइटम को सीधे समाप्त करना संभव नहीं है।

मास्टर आइटम की समयसीमा समाप्त होने पर आपको अधिसूचित होने के लिए एक तंत्र को लागू करने की आवश्यकता है, ताकि आप तदनुसार संबंधित सेट को बनाए रख सकें। और

Redis, session expiration, and reverse lookup

+0

हां, यह एक सभ्य तरीका है और मैं शायद कुछ इसी तरह की समस्या को संभालेगा। चूंकि टैग सेट में समय-समय पर समाप्त होने वाले सदस्यों का अस्तित्व किसी भी अन्य तरीके से प्रदर्शन में कोई समस्या नहीं है, इसलिए संभवत: एक न्यूनतम कम से कम चुनाव सीमित करने के लिए, मैं एक डेमॉन के समय-समय पर चलने वाले क्रॉन आइसटेड का उपयोग करूंगा। – Przemek

20

नहीं, यह संभव नहीं है (not planned either:

इस सवाल का जवाब देखें, मैं इसे आपके उपयोग के मामले पर लागू होता है लगता है (टैग द्वारा id के आधार पर सत्र, और उपयोगकर्ता की जगह))। recommended दृष्टिकोण ऑर्डर किए गए सेट का उपयोग टाइमस्टैम्प पर स्कोर सेट के साथ करना और फिर मैन्युअल रूप से समाप्त हो गई कुंजी को निकालना है। गैर-कालबाह्य कुंजी के लिए पूछताछ के लिए, आप ZRANGEBYSCORE $now +inf का उपयोग कर सकते हैं, समाप्त हो चुके कुंजी को हटाने के लिए, ZREMRANGEBYSCORE -inf $now चाल करेगा।

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

This article अधिक जानकारी में इसके माध्यम से चलता है।

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