Как проверить, что значение существует в списке в Redis? - PullRequest
1 голос
/ 02 марта 2012

Я использую Redis List для хранения списка пользователей. Я хочу проверить, присутствует ли пользователь в этом списке.

Например: мой список

 user: {name1,name2,name3}

Я хочу проверить, присутствует ли name3 в списке. Как это возможно с помощью Redis?

Ответы [ 3 ]

3 голосов
/ 02 марта 2012

Списки Redis, вероятно, не самая лучшая структура данных, если вам нужно проверить членство.Как говорит msgmash.com, наборы лучше подходят для этой цели, и если это список пользователей, я предполагаю, что каждый элемент будет уникальным?В этом случае набор - это то, что вам нужно.

Если вам нужен список по какой-либо причине, единственный способ (кроме выборки всего списка и итерации по нему, что неоптимально) - либо LINSERT новое значение до или после значения, которое вы проверяете - оно вернет -1, если значение не существует.Однако, если значение существует, вам нужно удалить только что вставленный элемент.Вы также можете использовать LREM аналогичным образом.

Но, опять же, вам, вероятно, лучше с набором для этого.

Как всегда, я рекомендуюВы прочитали документацию по командам Redis - это очень хорошая и понятная документация.

2 голосов
/ 02 марта 2012

Если вы сохраняете значения как наборы, то вы можете проверить наличие набора.Страница phpredis https://github.com/nicolasff/phpredis содержит примеры команд sAdd (добавить элемент в набор для данного ключа) и команды sIsMember (проверьте, является ли значение членом набора для данного ключа).

В противном случае вам придется выполнить проверку членства в PHP после того, как вы вернете все значение из redis и разберетесь с ним.

1 голос
/ 02 марта 2012

Чтобы добавить к тому, что было сказано, если вы в какой-то момент захотите как-то отсортировать пользователей, вам на самом деле лучше использовать отсортированный набор, где каждый элемент имеет оценку, и вы можете просматривать страницы в диапазонах, каксписок, но доступ почти O (1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...