Redis
 sql >> Baza danych >  >> NoSQL >> Redis

usuwaj zbiorczo wartości skrótu redis na podstawie nazwy klucza skrótu

Poniższy skrypt EVAL powinien zrobić to, co chcesz:

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

Musisz go wywołać, podając następujące parametry:

EVAL <script> 1 prefix:* cc_..

Pamiętaj, że blokuje pętlę zdarzeń Redis, dopóki skrypt nie zostanie ukończony, więc może zawiesić Redis na chwilę, jeśli masz dużą liczbę kluczy. Atomowość ma swoją cenę.

Aktualizacja:

Jeśli nie potrzebujesz atomowości, poniższy skrypt pozwoli uniknąć blokowania Redis przez zbyt długi czas (ale pamiętaj, że nadal będzie blokował, jeśli masz ogromną globalną liczbę kluczy lub jeśli jeden z twoich obiektów mieszających jest ogromny:istnieje nie ma sposobu, aby tego uniknąć).

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

(testowane z bashem)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Instalowanie Redisa na Ubuntu 16.04/18.04

  2. Redis nie uruchamia się jako usługa systemu Windows w systemie Windows7

  3. Pracujesz z dwoma oddzielnymi instancjami redis z sidekiq?

  4. Jak skonfigurować połączenie z Redis Sentinel za pomocą biblioteki Jedis?

  5. Klucz ioredis z pasującym wzorem