Как удалить все ключи в шаблоне соответствия Redis из redis-cli repl?

Я пытаюсь удалить связку ключей, соответствующих префиксу, используя redis-cli.

Я изучал, как это сделать в Интернете, и наиболее частое предложение, которое я видел, - это делать это прямо из командной строки, например:

$ redis-cli [options] KEYS "prefix:*" | xargs redis-cli [options] DEL

Однако я бы предпочел сделать это внутри инструмента redis-cli, чтобы мне не приходилось передавать параметры имени хоста, порта и аутентификации в команде cli каждый раз, когда я хочу удалить ключи, соответствующие шаблону. . Пока я пробовал:

  • DEL "prefix:*"
  • DEL KEYS prefix:*
  • DEL KEYS "prefix:*"
  • KEYS "prefix:*" | DEL
  • KEYS "prefix:*" DEL

Есть ли способ удалить все ключи под префиксом из внутри инструмента redis-cli? Командная строка - единственный способ добиться этого?

Не стесняйтесь комментировать, если вы хотите, чтобы я пояснил больше.


person Graham S.    schedule 01.03.2018    source источник


Ответы (2)


Выполните эту команду внутри redis-cli:

EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 prefix:*

Замените prefix:* требуемым шаблоном. Результатом будет количество удаленных ключей.

person Aswin Sanakan    schedule 20.11.2019

Вы можете написать lua-скрипт для удаления ключей.

local matches = redis.call('KEYS', ARGV[1])

local result = 0
for _,key in ipairs(matches) do
    result = result + redis.call('DEL', key)
end

return result 

Сохраните этот файл локально как delete.lua и запустите его так:

$redis-cli script load "$(cat delete.lua)"

"efe4f6a74ff9baba16d039f892dd09174b9f5777"

Этот "$ (cat delete.lua)" просто превращает наш скрипт в аргумент в кавычках. Важным битом является возвращаемое число (шестнадцатеричное). Это подпись сценария SHA1. Мы можем использовать это для вызова скрипта с помощью команды EVALSHA внутри redis-cli следующим образом:

EVALSHA efe4f6a74ff9baba16d039f892dd09174b9f5777 1 nil prefix:*
person Monzurul Haque Shimul    schedule 01.03.2018