Il seguente script EVAL dovrebbe fare quello che vuoi:
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
Devi chiamarlo fornendo i seguenti parametri:
EVAL <script> 1 prefix:* cc_..
Tieni presente che blocca il ciclo di eventi Redis fino al completamento dello script, quindi può bloccare Redis per un po' se hai un numero elevato di chiavi. L'atomicità ha un prezzo.
Aggiornamento:
Se non hai bisogno dell'atomicità, il seguente script eviterà di bloccare Redis per troppo tempo (ma tieni presente che si bloccherà comunque se hai un numero globale enorme di chiavi o se uno dei tuoi oggetti hash è enorme:c'è nessun modo per evitarlo).
./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
(testato con bash)