下面的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 endend您需要通过提供以下参数来调用它:
eval <script> 1 prefix:* cc_..
请注意,它会阻塞Redis事件循环,直到脚本完成为止,因此,如果您有大量键,它将冻结Redis一段时间。原子性是有代价的。
更新:
如果您不需要原子性,那么以下脚本将避免阻塞Redis太长时间(但是请注意,如果您拥有大量全局键,或者如果您的哈希对象之一很大,它将仍然阻塞:无法避免这种情况)。
./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(经过bash测试)



