Redis: найдите ключи, соответствующие шаблону

Как найти ключи, соответствующие шаблону:

Например:

У меня есть несколько клавиш:

abc:parent1

abc:parent2

abc:parent1:child1

abc:parent2:child2

Как найти только

abc:parent1

abc:parent2

2 ответа

Ключи специально отмечены как команда, которая не должна запускаться в процессе производства из-за того, как она работает. Здесь вам нужно создать индекс ваших ключей. Используйте set для хранения имен ключей требуемого шаблона. Когда вы добавляете новый ключ, добавьте его в набор. Например:

Set abc:parent1:child1 breakfast
Sadd abc:parent1:index abc:parent1

Затем, когда вам нужен список:

Smembers abc:parent1

Дает вам список без штрафов и проблем, связанных с использованием команды "злых" ключей. Кроме того, вы удалите запись с sremove при удалении ключа. Вы также получаете возможность узнать, сколько ключей находится в индексе с одним вызовом.

Если вы абсолютно, положительно, НЕ ДОЛЖНЫ избегать использования индекса SCAN вместо ключей. Единственный раз, когда вы должны рассматривать ключи, - это если вы используете ведомый отладочный файл, где единственным процессом, использующим его, является ваш процесс отладки.


Команда Шаблон KEYS поможет вам в этом же.

Пример:

redis> MSET one 1 two 2 three 3 four 4
OK
redis> KEYS *o*
1) "two"
2) "one"
3) "four"

В вашем конкретном примере будет работать следующая команда:

redis 127.0.0.1:6379> keys *parent[0-9]
1) "abc:parent2"
2) "abc:parent1"

Здесь подробное описание команды.

Обновление: Хотя приведенное выше предложение поможет вам получить желаемый результат, команда redis KEYS является злой, как упоминалось в других. KEYS блокирует и может потреблять много оперативной памяти при подготовке ответа.

Не используйте KEYS в своем обычном коде приложения. Если вы ищете способ поиска ключей в подмножестве своего пространства ключей, рассмотрите возможность использования SCAN или наборов.

Спасибо Настоящему Биллу и Итамару, я получил лучшее понимание.

licensed under cc by-sa 3.0 with attribution.