Подтвердить что ты не робот

Найти ключ по значению

Думаю, что я пытаюсь реализовать, это таблица идентификаторов. В основном он имеет структуру (user_id, lecturer_id), которую user_id ссылается на первичный ключ в моей таблице User, а lecturer_id - на первичный ключ моей таблицы Lecturer.

Я пытаюсь реализовать это в redis, но если я установил ключ как первичный id пользователя, когда я попытаюсь запустить запрос, например , получить все записи с лектором id = 5, поскольку лектор а не ключ, но значение Я не смогу достичь его в течение O (1).

Как я могу создать структуру, такую ​​как указанная выше таблица идентификаторов, или Redis не поддерживает это?

4b9b3361

Ответ 1

Одна из вещей, которые вы быстро изучаете при работе с redis, заключается в том, что вы можете проектировать свою структуру данных вокруг ваших потребностей доступа, особенно когда дело касается отношений (это не реляционная база данных)

Невозможно выполнить поиск по "значению" с временной сложностью O (1), как вы уже заметили, но есть способы приблизиться к описанию с помощью redis. Вот что я бы рекомендовал:

  • Сохраняйте свои пользовательские данные по идентификатору пользователя (например, хэшу), как вы уже делаете.
  • У вас есть дополнительный набор для каждого идентификатора лектора, содержащий все идентификаторы пользователей, которые соответствуют идентификатору лектора.

Это может показаться дублирующим данные отношения, так как ваши пользовательские данные должны будут хранить идентификатор лекции, а ваши данные лекций будут хранить идентификаторы пользователей, но что (крошечная) цена для оплаты, если нужно строить отношения в нереляционном хранилище данных, таком как redis. На практике это работает хорошо; память редко является узким местом для небольших наборов данных (думаю, тысячи идентификаторов).

Чтобы получить более полное представление о том, как люди, использующие redis для моделирования приложений с отношениями, рекомендую читать Разработка и внедрение простого тэга Twitter и исходный код Lamernews, оба из которых написаны автором redis Сальваторе Санфилиппо.