Как надежнее удалить больше 2КК ключей из Redis?

Всем привет! Подскажите, очень нужно.

Допустим есть база, нужно по префиксу удалять данные (стандартно).

$keys = $this->redis->keys($this->_prefix . '*');
$this->redis->del($keys);


Для маленьких объемов - работает хорошо. А вот как поступать с большим кол-вом данных? Тут и метод KEYS не подходит т.к. имеет сложность O(N). Спасибо за ваши варианты!
  • Вопрос задан
  • 404 просмотра
Решения вопроса 1
С 3.0 для такого рекомендуется использовать теги. Keys hash tags
В вашем случае - их нужно использовать вместо префикса.
Имена ключей должны выглядеть примерно так - {user1000}.following, где user1000 - это тег.
KEYS по тегу не будет проверять все ключи в бд т.е сложность будет на порядки меньше чем O(N)
И бонусом - будет совместимо с redis-cluster
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
redis-cli KEYS "prefix:*" | xargs redis-cli DEL, например?
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
eval "for _,k in ipairs(redis.call('keys','key:*:pattern')) do redis.call('del',k) end" 0


Замените key:*:pattern на свой шаблон и скормите redis-cli.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы