Вот полностью рабочая и атомарная версия удаления с подстановочными знаками, реализованная в Lua. Он будет работать намного быстрее, чем версия xargs, благодаря гораздо меньшей скорости передачи данных по сети и абсолютно атомарен, блокируя любые другие запросы от redis до его завершения. Если вы хотите атомарно удалить ключи в Redis 2.6.0 или более поздней версии, это определенно путь:
redis-cli -n [some_db] -h [some_host_name] EVAL "return redis.call('DEL', unpack(redis.call('KEYS', ARGV[1] .. '*')))" 0 prefix:
Это рабочая версия идеи @ mcdizzle в ответе на этот вопрос. Кредит на идею 100% достается ему.
РЕДАКТИРОВАТЬ: Согласно комментарию Kikito ниже, если у вас есть больше ключей для удаления, чем свободной памяти на вашем сервере Redis, вы столкнетесь с "слишком много элементов для распаковки" ошибка . В этом случае выполните:
for _,k in ipairs(redis.call('keys', ARGV[1])) do
redis.call('del', k)
end
Как предложил Кикито.