Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

हैश कुंजी नाम के आधार पर थोक में रेडिस हैश मान हटाएं

निम्नलिखित EVAL स्क्रिप्ट को वही करना चाहिए जो आप चाहते हैं:

local keys = redis.call('KEYS',KEYS[1])
for i,k in ipairs(keys) do
    local res = redis.call('HKEYS',k)
    for j,v in ipairs(res) do
        if string.find(v,ARGV[1]) then
            redis.call('HDEL',k,v)
        end
    end
end

आपको निम्नलिखित पैरामीटर प्रदान करके इसे कॉल करने की आवश्यकता है:

EVAL <script> 1 prefix:* cc_..

कृपया ध्यान दें कि यह स्क्रिप्ट पूरी होने तक रेडिस इवेंट लूप को ब्लॉक करता है, इसलिए यदि आपके पास बड़ी संख्या में कुंजियाँ हैं तो यह कुछ समय के लिए रेडिस को फ्रीज कर सकता है। परमाणु की एक कीमत होती है।

अपडेट करें:

यदि आपको परमाणुता की आवश्यकता नहीं है, तो निम्न स्क्रिप्ट रेडिस को बहुत लंबे समय तक अवरुद्ध करने से बचेगी (लेकिन कृपया ध्यान दें, यदि आपके पास बड़ी संख्या में चाबियां हैं या यदि आपकी हैश ऑब्जेक्ट में से एक बड़ी है तो यह अभी भी अवरुद्ध हो जाएगी:वहां है इससे बचने का कोई उपाय नहीं है)।

./redis-cli keys 'prefix:*' | awk '
BEGIN {
    script = "local res = redis.call('\''HKEYS'\'',KEYS[1]); \
          for j,v in ipairs(res) do                          \
            if string.find(v,ARGV[1]) then                   \
              redis.call('\''HDEL'\'',KEYS[1],v);            \
            end                                              \
          end"
}
{
    printf "EVAL \"%s\" 1 %s cc_..\n", script, $1
}' | ./redis-cli

(बैश के साथ परीक्षण किया गया)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस कनेक्ट ECONNREFUSED 127.0.0.1:6379

  2. ubuntu14.04 में रेडिस-सर्वर:बाइंड एड्रेस पहले से उपयोग में है

  3. क्या मुझे बड़ी संख्या में बाइनरी फाइलों को स्टोर करने के लिए रेडिस का उपयोग करना चाहिए?

  4. फोरमैन तुरंत समाप्त करता है

  5. त्रुटि jemalloc/jemalloc.h:Redis बनाते समय ऐसी कोई फ़ाइल या निर्देशिका नहीं है