2012-08-07 12 views
12

मेरे redis सर्वर कुंजी को नहीं हटाता है जब समय-टू-लिव पहुँच 0.मेरी redis कुंजी समाप्त नहीं

यहाँ एक नमूना कोड है: अगर मैं द्वारा जानकारी वापसी जाँच

redis-cli 
>SET mykey "ismykey" 
>EXPIRE mykey 20 
#check TTL 
>TTL mykey 
>(integer) 17 
> ... 
>TTL mykey 
>(integer) -1 
#mykey chould have expired: 
>EXISTS mykey 
>(integer) 1 
>#oh still there, check its value 
>GET mykey 
>"ismykey" 

रेडिस, यह कहता है कि 0 चाबियाँ समाप्त हो गईं।

कोई विचार?

धन्यवाद।

उत्तर

19

चूंकि आप एक '...' कर रहे हैं, निश्चित रूप से कहना मुश्किल है, लेकिन मैं कहूंगा कि आप उस भाग के दौरान अपनी बंदर सेट कर रहे हैं, जो प्रभावी रूप से समाप्ति को हटा देगा।

From the EXPIRE manual

टाइमआउट केवल मंजूरी दे दी है जब कुंजी डेल आदेश का उपयोग कर हटाया या सेट का उपयोग ओवरराइट या GETSET आदेश

Also, regarding the -1 reply from TTL

वापसी मान

है

इंटीजर उत्तर: सेकंड में टीटीएल या -1 जब कुंजी मौजूद नहीं है या टाइमआउट नहीं है।

संपादित करें: ध्यान दें कि इस व्यवहार Redis 2,8

में बदल Redis 2.8 गलती की स्थिति में वापसी मान के साथ शुरू बदल दिया है:
आदेश रिटर्न -2 यदि कुंजी मौजूद नहीं है ।
कमांड -1 होता है यदि कुंजी मौजूद है लेकिन कोई संबद्ध समाप्ति नहीं है।

दूसरे शब्दों में, यदि आपकी कुंजी मौजूद है, तो यह लगातार प्रतीत होता है, यानी कोई समाप्ति सेट नहीं है।

संपादित करें: ऐसा लगता है कि अगर मैं एक RedIS गुलाम सर्वर पर कुंजी बना देता हूं, तो मैं इसे पुन: पेश कर सकता हूं, दास मास्टर इनपुट के बिना कुंजी को नहीं हटाएगा, क्योंकि आम तौर पर आप गुलाम पर स्थानीय रूप से कुंजी नहीं बनाते हैं। क्या यह मामला यहाँ है?

हालांकि, जबकि एक मास्टर से जुड़ा दास कुंजी स्वतंत्र रूप से समाप्त नहीं होगी (लेकिन डेल गुरु से आने के लिए इंतजार करेंगे), वे अभी भी पूरे राजकीय लूँगा की डेटासेट में मौजूदा समय सीमा समाप्त , इसलिए जब एक गुलाम को एक मास्टर के लिए चुना जाता है तो यह सक्षम हो जाएगा, चाबियों को स्वतंत्र रूप से समाप्त कर देगा, पूरी तरह से मास्टर के रूप में कार्य करेगा।

+0

आपके त्वरित उत्तर के लिए धन्यवाद। मेरे स्निपेट में '...' का मतलब केवल यह था कि टीटीएल रिटर्न -1 तक मैं 20s का इंतजार करता हूं। मैं यहां कोई आदेश टाइप नहीं करता हूं। तो समाप्ति का अंत खत्म होना चाहिए, नहीं? – user1151446

+0

@ user1151446 मेरा संपादन देखें। –

+0

धन्यवाद Joachim! यह बिल्कुल सही बात है, मैं अनजाने में मास्टर की बजाय दास पर अपनी कुंजी सेट करता हूं, जो असंगत है। अगर मैं अपने मास्टर पर स्विच करता हूं तो सब ठीक काम करता है। – user1151446

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