Redis поиск ключей со значением

Как вы ищете ключи со значением в Ruby? Например, получите все КЛЮЧИ, где значение равно "some value".

Мои ключи

"xyz" => {: status => "connected",: topic => "ABC"}

"PQR" => {: status => "connected",: topic => "ABC"}

Теперь мне нужно найти все ключи, где тема "Азбука"

2 ответа

Независимо от языка программирования, чтобы сделать это эффективно, вам потребуется поддерживать индексный ключ, который сопоставляет некоторое значение с именами ключей. Использование набора или отсортированного набора для этого - то, что вы обычно должны делать - т.е. добавлять к нему новые имена ключей и удалять их в соответствии с их значениями - и получать содержимое этого ключа, когда вы хотите "выполнить поиск".

Есть некоторые библиотеки (например, гемы), которые могут предоставить такую ​​функциональность, готовую к использованию - посмотрите на самый превосходный Ом в вашем случае.

РЕДАКТИРОВАТЬ

Мои ключи xyz => {:status=> "подключен",:topic=> "ABC"} PQR => {:status=> "подключен",: topic => "ABC"} Теперь мне нужно найти все КЛЮЧИ, где тема "Азбука"

Я бы хранил значение xyz как String или Hash (в зависимости от того, нужно ли мне обновлять / читать только его части или нет). Тогда я бы SADD topic:ABC xyz и делать SMEMBERS или же SSCAN на нем, чтобы получить имена всех ключей с этой темой. Я также постараюсь не забыть SREM соответствующий участник из темы:ABC, когда я DEL его ключ...

Зависит от того, в какой версии redis вы можете использовать getkeys для redis >= 2.8.13, или вы можете использовать команду keys для решения некоторых проблем производительности (если у вас мало ключей, это не должно быть проблемой, но если у вас большое количество ключей, позаботьтесь с этим, потому что команда keys заблокирует redis на несколько секунд, чтобы получить все ключи)

Если вы используете Redis 2.8, вы можете использовать команду сканирования вместо ключей.

РЕДАКТИРОВАТЬ: Недавно добавленная страница в документации Redis предоставляет дополнительную информацию о вторичной индексации с помощью Redis и охватывает этот случай в разделе " Индексы вне диапазона ". Дополнительные темы в нем включают в себя:

Другие вопросы по тегам