Redis में बड़े ऑब्जेक्ट्स को हटाना धीमा क्यों है, इसके बारे में अधिक जानने के लिए यह त्वरित अवलोकन पढ़ें
Redis में एक बड़े सेट को हटाने के लिए:
की को एक यूनिक, नेमस्पेस्ड की पर रीनेम करें ताकि सेट अन्य Redis क्लाइंट्स को तुरंत "हटाया हुआ" दिखाई दे।
सेट से मेंबर्स को छोटे बैचों में इन्क्रीमेंटली तब तक हटाएं जब तक यह खाली न हो जाए। अपने डिलीट कमांड्स के आकार को सीमित करके, हम सुनिश्चित करते हैं कि हम सर्वर को बहुत लंबे समय तक ब्लॉक न करें।
कृपया ध्यान दें कि निम्नलिखित कोड Redis कनेक्शन विफलताओं को ग्रेसफुली हैंडल नहीं करता है। यदि कोई Redis कमांड विफल होता है और एक्सेप्शन उठाता है, तो आपको मैन्युअल रूप से सफाई करने की आवश्यकता होगी।
स्यूडो-कोड
# की को रीनेम करें newkey = "gc:hashes:" + redis.INCR("gc:index") redis.RENAME("my.set.key", newkey) # सेट से मेंबर्स को 100 के बैचों में हटाएं cursor = 0 loop cursor, members = redis.SSCAN(newkey, cursor, "COUNT", 100) if size of members > 0 redis.SREM(newkey, members) end if cursor == 0 break end end
Ruby
$redis = Redis.new def delete_set(key) # की को रीनेम करें newkey = "gc:sets:#{$redis.incr("gc:index")}" $redis.rename(key, newkey) # सेट से मेंबर्स को 100 के बैचों में हटाएं cursor = "0" loop do cursor, members = $redis.sscan(newkey, cursor, count: 100) $redis.srem(newkey, members) if members.size > 0 break if cursor == "0" end end # उदाहरण: # # delete_set("my.large.set")
उपरोक्त का उपयोग करके Ruby में बैकग्राउंड जॉब्स में कुछ उदाहरण कार्यान्वयन यहां दिए गए हैं:
- Resque
- Sidekiq
← "Redis में बड़े ऑब्जेक्ट्स हटाने" पर वापस