Skrip EVAL berikut harus melakukan apa yang Anda inginkan:
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
Anda perlu memanggilnya dengan memberikan parameter berikut:
EVAL <script> 1 prefix:* cc_..
Harap dicatat bahwa ini memblokir loop acara Redis hingga skrip selesai, sehingga dapat membekukan Redis untuk sementara waktu jika Anda memiliki banyak kunci. Atomicity ada harganya.
Pembaruan:
Jika Anda tidak memerlukan atom, maka skrip berikut akan menghindari pemblokiran Redis terlalu lama (tapi harap dicatat, itu masih akan memblokir jika Anda memiliki sejumlah besar kunci global atau jika salah satu objek hash Anda besar:ada tidak ada cara untuk menghindari ini).
./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
(diuji dengan bash)