निम्नलिखित 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
(बैश के साथ परीक्षण किया गया)