Набор запросов на основе определенного хеш-значения его членов

Это было бы легко в большинстве баз данных, но не знаю, как это сделать в Redis. Итак, вот как я добавляю элементы в набор:

 redis.sadd("usersRandom", userID);
 redis.hmset("users:"+userID, "socketID", socket.id, "hangoutId",hangoutIds, "language",languageName);
  • Набор usersRandom — это набор пользователей
  • Каждый user в этом наборе имеет три хранящихся в нем хеш-значения — socketID, hangoutId, language.

Я хотел бы выполнить это:

 redis.spop("usersRandom");

ОДНАКО, я хотел бы выводить только пользователей с определенным значением language.


Я придумал два способа сделать это:

  1. Возвращаем всех членов набора usersRandom и затем сопоставляем их себе по ключу language — тогда поп.

  2. Создавайте разные наборы на основе languages. Таким образом, у меня было бы множество наборов, таких как usersRandom_english, usersRandom_spanish (с этими именами переменных можно было бы немного поработать). Это кажется более запутанным, но, возможно, это лучший способ с Redis.

Есть лучший способ сделать это?


person OdieO    schedule 13.08.2014    source источник


Ответы (1)


2 - правильное направление. Вы можете рассмотреть возможность использования отсортированного набора для всех языков (при условии, что у каждого пользователя есть один и только один язык) для хранения идентификаторов пользователей - используйте оценку в качестве индикатора грубого языка (например, английский - это оценка 1, испанский - 2...). Это позволит вам делать диапазоны по счету (языку), чтобы получить соответствующие идентификаторы.

person Itamar Haber    schedule 14.08.2014