रेडिस में बड़ी वस्तुओं को हटाना धीमा क्यों है, इस बारे में अधिक जानने के लिए, इस त्वरित अवलोकन को पढ़ें
Redis में एक बड़ा हैश हटाने के लिए:
-
कुंजी को एक अद्वितीय, नेमस्पेस्ड कुंजी का नाम दें ताकि हैश अन्य रेडिस क्लाइंट को तुरंत "डिलीट" दिखाई दे।
-
खाली होने तक हैश से छोटे बैचों में फ़ील्ड हटाएं। हमारे डिलीट कमांड के आकार को सीमित करके, हम सुनिश्चित करते हैं कि हम सर्वर को बहुत लंबे समय तक ब्लॉक नहीं करते हैं।
कृपया ध्यान दें कि निम्न कोड रेडिस कनेक्शन विफलताओं को इनायत से नहीं संभालता है। यदि कोई रेडिस कमांड विफल हो जाता है और अपवाद उत्पन्न करता है, तो आपको मैन्युअल रूप से सफाई करनी होगी।
छद्म कोड
# Rename the key
newkey = "gc:hashes:" + redis.INCR( "gc:index" )
redis.RENAME("my.hash.key", newkey)
# Delete fields from the hash in batche of 100s
cursor = 0
loop
cursor, hash_keys = redis.HSCAN(newkey, cursor, "COUNT", 100)
if hash_keys count > 0
redis.HDEL(newkey, hash_keys)
end
if cursor == 0
break
end
end
रूबी
$redis = Redis.new
def delete_hash(key)
# Rename the key
newkey = "gc:hashes:#{$redis.incr("gc:index")}"
$redis.rename(key, newkey)
# Delete fields from the hash in batches of 100
cursor = "0"
loop do
cursor, fields = $redis.hscan(newkey, cursor, count: 100)
hkeys = fields.map { |pair| pair[0] }
$redis.hdel(newkey, hkeys) if hkeys.size > 0
break if cursor == "0"
end
end
# Example:
#
# delete_hash("my.large.hash")
रूबी में बैकग्राउंड जॉब का उपयोग करके उपरोक्त के कुछ उदाहरण कार्यान्वयन यहां दिए गए हैं:
- अनुरोध
- साइडकीक
← "Redis में बड़ी वस्तुओं को हटाना" पर वापस जाएं