Как запросить мои данные на основе нескольких критериев наиболее эффективным способом в REDIS?

Я не привык работать с хранилищами ключей-значений.

Я создаю веб-игру. Моя цель — сопоставить онлайн-пользователей друг с другом. Как только пользователь подключится к Интернету и решит играть, он будет временно добавлен в хранилище данных REDIS (до выхода из системы).

Я добавлю их, используя их ID в качестве ключа и их данные (NAME, GAMETOPLAY, RANKING, STATUS и т. Д.) В виде хэша или набора. Не уверен, какой тип данных еще лучше.

Как мне сопоставить пользователей (то есть записи REDIS) вместе? В основном у меня будут ожидающие пользователи в хранилище данных REDIS, и я хочу просмотреть каждую запись, пока не получу совпадение. Но, очевидно, вы не можете искать в REDIS, так как мне это сделать?

Я не хочу извлекать каждую запись из Redis, просто чтобы проверить ее детали. Это кажется очень дорогим ресурсом. Должен быть лучший способ.

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

Чтобы быть более точным. Я хочу запросить свои данные на основе нескольких критериев. Видимо, вы можете сделать это, используя отсортированные наборы. Но мне все еще нужно несколько критериев. Некоторые критерии, которые я могу обойти, сохраняя в другой таблице / базе данных (?), Я думаю, но не все.

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

По-видимому, я могу сделать это с помощью многомерных индексов.

0

Решение

Способ поиска REDIS — это сначала создать и поддерживать индексы для ваших запросов.

Допустим, вы добавляете нового пользователя с RANKING X, GAMETOPLAY Y, и вы будете искать пользователей по диапазону рейтинга и точному значению геймплея.

Ваша задача сейчас состоит в том, чтобы создать структуру, которая будет иметь таких пользователей, как отсортированный набор «gametoplay:gametoplayvalue«(ключи = идентификатор_пользователя и баллы = рейтинг)

Другое решение нескольких критериев поиска будет использовать:

http://redis.io/commands/sinter

http://redis.io/commands/sinterstore

Вы поддерживаете наборы, как:

  • status_set: status (key = user_id)
  • gametoplay_set: game_id (key = user_id)
  • ранжирование: rating_from_x_to_y (key = user_id)

А если вы хотите найти пользователей по нескольким критериям, вы можете использовать sinter для пересечения.

Подвести итог:

  • при добавлении пользователя добавьте его идентификатор ко всем необходимым наборам / хэшам
  • затем просто запросите эти наборы / хэши для идентификаторов
  • при удалении пользователя удалите его идентификатор из всех наборов / хэшей
1

Другие решения

Вы можете сохранить временные данные пользователя, добавив префикс к идентификатору.

tmp_ (идентификатор_пользователя)

добавьте tmp_ к user_id для временных деталей.

и просто user_id для постоянных деталей

0

По вопросам рекламы [email protected]