Redis
 sql >> база данни >  >> NoSQL >> Redis

изтрийте групово хеш стойностите на redis въз основа на името на хеш ключ

Следният EVAL скрипт трябва да прави това, което искате:

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

Трябва да го извикате, като предоставите следните параметри:

EVAL <script> 1 prefix:* cc_..

Моля, имайте предвид, че блокира цикъла на събитията Redis, докато скриптът не завърши, така че може да замрази Redis за известно време, ако имате голям брой ключове. Атомността има цена.

Актуализация:

Ако нямате нужда от атомарност, следният скрипт ще избегне блокирането на Redis твърде дълго (но, моля, имайте предвид, че той все още ще блокира, ако имате огромен глобален брой ключове или ако един от вашите хеш обекти е огромен:има няма начин да се избегне това).

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

(тествано с bash)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Каква е разликата между area и BoundingBox от изходния код на Redis

  2. Съхраняване на ключове с префикс, които изтичат в redis

  3. Събитието на ключовото пространство Redis не се задейства

  4. Бог конфигурационен файл за наблюдение на съществуващи процеси?

  5. Как да изтриете Heroku Redis?