sql >> Database >  >> NoSQL >> Redis

verwijder redis hash-waarden in bulk op basis van de hash-sleutelnaam

Het volgende EVAL-script zou moeten doen wat u wilt:

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

U moet het aanroepen door de volgende parameters op te geven:

EVAL <script> 1 prefix:* cc_..

Houd er rekening mee dat het de Redis-gebeurtenislus blokkeert totdat het script is voltooid, dus het kan Redis een tijdje bevriezen als je een groot aantal sleutels hebt. Atomiciteit heeft een prijs.

Bijwerken:

Als je de atomiciteit niet nodig hebt, zal het volgende script voorkomen dat Redis te lang wordt geblokkeerd (maar let op, het blokkeert nog steeds als je een enorm globaal aantal sleutels hebt of als een van je hash-objecten enorm is:er is geen manier om dit te vermijden).

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

(getest met bash)



  1. Mongodb:kon geen verbinding maken met de server bij de eerste verbinding

  2. Python-database programmeren met MongoDB voor beginners

  3. Redis-implementatieconfiguratie - master-slave-replicatie

  4. MongoDB dubbele documenten, zelfs na het toevoegen van een unieke sleutel