2016-03-23 5 views
9

रेडिस कुंजी की समाप्ति को कैसे कार्यान्वित करता है? here से मैंने सीखा कि रेडिस उस समय को संग्रहीत करता है जिस पर कुंजी समाप्त हो जाएगी, लेकिन यह वास्तव में कैसे लागू किया जाता है?रेडिस कुंजी की अवधि कैसे समाप्त करता है?

+0

शीर्षक और सवाल मेल नहीं खाते। आप क्या पूछ रहे हो? रेडिस कुंजी की अवधि कैसे समाप्त करता है? या क्या सूची में वस्तुओं की समाप्ति करना संभव है? –

+0

@Not_a_Golfer मैंने शीर्षक बदल दिया है, भ्रम के लिए खेद है। –

उत्तर

24

संक्षेप में - प्रत्येक रेडिस ऑब्जेक्ट के लिए, एक समाप्ति समय होता है। जब तक आप ऑब्जेक्ट को समाप्त करने के लिए सेट नहीं करते हैं, वह समय "कभी नहीं" होता है।

अब, समाप्ति तंत्र स्वयं अर्द्ध आलसी है। आलसी समाप्ति का मतलब है कि जब तक वे पढ़े नहीं जाते हैं तब तक आप वास्तव में वस्तुओं की अवधि समाप्त नहीं करते हैं। इस मामले में किसी ऑब्जेक्ट को पढ़ने पर हम इसकी समाप्ति टाइमस्टैम्प की जांच करते हैं, और यदि यह अतीत में है, तो हम कुछ भी नहीं लौटाते हैं, और ऑब्जेक्ट को हटाते समय हम इसे हटा देते हैं। लेकिन समस्या यह है कि यदि कोई कुंजी कभी छूती नहीं है, तो यह किसी भी कारण से स्मृति लेता है।

तो रेडिस यादृच्छिक सक्रिय समाप्ति की दूसरी परत जोड़ता है। यह हर समय यादृच्छिक कुंजी पढ़ता है, और जब एक कालबाह्य कुंजी को छुआ जाता है तो यह आलसी तंत्र के आधार पर हटा दिया जाता है। यह समाप्त होने वाले व्यवहार को प्रभावित नहीं करता है, यह केवल समाप्त होने वाली कुंजी के "कचरा संग्रहण" जोड़ता है।

बेशक वास्तविक कार्यान्वयन इससे अधिक जटिल है, लेकिन यह मुख्य विचार है।

आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: http://redis.io/commands/expire

और सक्रिय समाप्ति चक्र के लिए स्रोत कोड यहां पाया जा सकता: https://github.com/antirez/redis/blob/unstable/src/server.c#L781

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