चर्चा करने से पहले कि कौन सा बेहतर है, आइए इन आदेशों के बीच के अंतर को देखें। दोनों DEL
और UNLINK
ब्लॉकिंग मोड में मुख्य भाग को मुक्त करें। और अंतर यह है कि वे मूल्य भाग को कैसे मुक्त करते हैं।
DEL
हमेशा ब्लॉकिंग मोड में वैल्यू पार्ट को फ्री करता है। हालांकि, अगर मान बहुत बड़ा है, उदा. एक बड़े LIST
. के लिए बहुत अधिक आवंटन या HASH
, यह लंबे समय तक रेडिस को अवरुद्ध करता है। समस्या को हल करने के लिए, Redis UNLINK
. को लागू करता है कमांड, यानी एक 'नॉन-ब्लॉकिंग' डिलीट।
वास्तव में, UNLINK
हमेशा गैर-अवरुद्ध/async नहीं होता . यदि मान छोटा है, उदा। LIST
. का आकार या HASH
64
. से कम है , मान तुरंत मुक्त हो जाएगा। इस तरह, UNLINK
लगभग DEL
. जैसा ही है , सिवाय इसके कि इसमें DEL
. की तुलना में कुछ अधिक फ़ंक्शन कॉल का खर्च आता है . हालाँकि, यदि मान बड़ा है, तो Redis मान को एक सूची में रखता है, और मान को किसी अन्य थ्रेड द्वारा मुक्त किया जाएगा अर्थात गैर-अवरुद्ध मुक्त। इस तरह, मुख्य थ्रेड को बैकग्राउंड थ्रेड के साथ कुछ सिंक्रोनाइज़ेशन करना पड़ता है, और यह भी एक लागत है।
निष्कर्ष में, यदि मान छोटा है, DEL
कम से कम उतना ही अच्छा है जितना UNLINK
. यदि मान बहुत बड़ा है, उदा. LIST
हजारों या लाखों वस्तुओं के साथ, UNLINK
DEL
. से काफी बेहतर है . आप हमेशा DEL
. को सुरक्षित रूप से बदल सकते हैं UNLINK
. के साथ . हालांकि, अगर आपको लगता है कि थ्रेड सिंक्रोनाइज़ेशन एक समस्या बन जाता है (मल्टी-थ्रेडिंग हमेशा एक सिरदर्द होता है), तो आप DEL
पर रोलबैक कर सकते हैं ।
अद्यतन करें:
Redis 6.0 के बाद से, एक नया कॉन्फ़िगरेशन है:आलसी-आलसी-उपयोगकर्ता-डेल . आप इसे हां . पर सेट कर सकते हैं , और रेडिस DEL
चलाएगा कमांड जैसे कि कोई UNLINK
चल रहा हो आदेश।