sql >> Databáze >  >> NoSQL >> Redis

hromadně odstranit hodnoty hash redis na základě názvu klíče hash

Následující skript EVAL by měl dělat to, co chcete:

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

Musíte jej zavolat zadáním následujících parametrů:

EVAL <script> 1 prefix:* cc_..

Upozorňujeme, že blokuje smyčku událostí Redis, dokud není skript dokončen, takže může na chvíli zmrazit Redis, pokud máte velký počet klíčů. Atomicita má svou cenu.

Aktualizace:

Pokud atomicitu nepotřebujete, pak následující skript zabrání blokování Redis na příliš dlouhou dobu (ale pamatujte si, že bude stále blokovat, pokud máte velký globální počet klíčů nebo pokud je jeden z vašich hashových objektů obrovský:existuje žádný způsob, jak se tomu vyhnout).

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

(testováno pomocí bash)



  1. V MongoDB hledejte v poli a seřaďte podle počtu shod

  2. mongo:návrat se nerovná count()

  3. Nelze spustit/spustit místní mongo db

  4. Nakonfigurujte časový limit Jedisů