sql >> Database teknologi >  >> NoSQL >> Redis

slet redis-hash-værdier i bulk baseret på hash-nøglens navn

Følgende EVAL-script skal gøre, hvad du vil:

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
 

Du skal kalde det ved at angive følgende parametre:

EVAL <script> 1 prefix:* cc_..
 

Bemærk venligst, at det blokerer Redis-begivenhedsløkken, indtil scriptet er færdigt, så det kan fryse Redis i et stykke tid, hvis du har et stort antal nøgler. Atomicitet har en pris.

Opdatering:

Hvis du ikke har brug for atomiciteten, så vil følgende script undgå at blokere Redis for længe (men bemærk venligst, det vil stadig blokere, hvis du har et enormt globalt antal nøgler, eller hvis et af dine hash-objekter er enormt:der er ingen måde at undgå dette).

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

(testet med bash)



  1. MongoDB tilføjer til samlingsfelt fra basis 1

  2. Hvordan trækker jeg den oprettede dato ud af et Mongo ObjectID

  3. Geospatial support i MongoDB

  4. Hvordan kan man omgå manglen på transaktioner i MongoDB?