Мне интересно, есть ли способ проверить, существует ли ключ в списке redis?
Я не могу использовать набор, потому что я не хочу применять уникальность, но я хочу, чтобы проверить, действительно ли строка там.
Спасибо.
Мне интересно, есть ли способ проверить, существует ли ключ в списке redis?
Я не могу использовать набор, потому что я не хочу применять уникальность, но я хочу, чтобы проверить, действительно ли строка там.
Спасибо.
Ваши варианты следующие:
LREM
и заменив его, если он был найден.SET
в сочетании с вашим LIST
LIST
до тех пор, пока вы не найдете элемент или не достигнете конца.Списки Redis реализованы как http://en.wikipedia.org/wiki/Linked_list, следовательно, ограничения.
Я думаю, что ваш лучший вариант - поддерживать дубликат SET
. Это то, что я обычно делаю. Просто подумайте об этом как о дополнительном индексе. Независимо от того, убедитесь, что ваши действия являются атомарными с MULTI
- EXEC
или сценариями Lua.
Списки позволяют дублировать, но не обеспечивают простой способ проверки на существование и, как советуют @Fritzy, вам либо необходимо:
Я удивлен, что никто не советовал вам использовать либо Hash Table, либо Sorted Set, которые сочетают в себе преимущества , позволяющие дублирование (путем хранения количество элементов как значение - таблица хэшей или оценка - отсортированный набор) и индексирующие элементы по характеру хэш-таблицы/набора.
Чтобы проверить наличие ключа, используйте команду HGET
. Он возвращает ответ nil
, если указанный член не существует.
Чтобы добавить новый элемент, просто используйте HINCRBY
, который либо обновит значение (т.е. количество элементов с именем члена), либо создаст новый элемент, если он не существует.
Чтобы проверить наличие ключа, используйте одну из трех следующих команд:
ZSCORE
ZRANK
ZREVRANK
Они возвращают ответ nil
, если указанный член не существует.
Чтобы добавить нового участника, просто используйте ZINCRBY
, который либо обновит счет (то есть количество элементов с именем члена), либо создаст новый элемент, если он не существует.
Подводя итог: сортированные наборы или хэш-таблицы позволяют выполнять все операции с вашими требованиями с помощью одной команды.
Нет, нет способа проверить, содержит ли список redis заданное значение. См. Передать команды списка для справки.
Я думаю, вы могли бы использовать LREM
для (попытаться) удалить значение и проверить возвращаемое значение, чтобы увидеть, было ли оно удалено. Но тогда вам придется вернуть его обратно, и это кажется неудобным. Вероятно, есть какое-то лучшее решение вашей проблемы - чего вы пытаетесь достичь?