Redis
 sql >> Base de données >  >> NoSQL >> Redis

supprimer les valeurs de hachage redis en masse en fonction du nom de la clé de hachage

Le script EVAL suivant devrait faire ce que vous voulez :

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

Vous devez l'appeler en fournissant les paramètres suivants :

EVAL <script> 1 prefix:* cc_..

Veuillez noter qu'il bloque la boucle d'événements Redis jusqu'à ce que le script soit terminé, il peut donc geler Redis pendant un certain temps si vous avez un grand nombre de clés. L'atomicité a un prix.

Mise à jour :

Si vous n'avez pas besoin de l'atomicité, alors le script suivant évitera de bloquer Redis trop longtemps (mais attention, il bloquera quand même si vous avez un grand nombre global de clés ou si l'un de vos objets de hachage est énorme :il y a aucun moyen d'éviter cela).

./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

(testé avec bash)