Как мне сохранить это в Redis? - PullRequest
2 голосов
/ 14 июня 2011

У меня много товаров (product_id). Пользователи (user_id) просматривают товары.

Я хочу запросить, какие пользователи просматривали какой-либо продукт за последние 24 часа . (Другими словами, я хочу сохранить список user_ids, прикрепленных к этому product_id ... и когда для пользователя истекает 24 часа, этот пользователь выскакивает из этого списка и запись исчезает)

Как мне сохранить это в Redis? Может кто-нибудь дать мне схему высокого уровня, потому что я новичок в Redis.

Ответы [ 2 ]

3 голосов
/ 14 июня 2011

Для чего-то подобного я использую отсортированный набор со значениями, являющимися идентификаторами пользователя, и счетом, являющимся текущим временем.При обновлении набора удалите старые элементы с помощью ZREMRANGEBYSCORE, а также обновите счет времени для текущего пользователя.

Обновите с помощью кода:

При каждом добавлении нового элемента:

ZREMRANGEBYSCORE recentitems 0 [DateTime.Now.AddMinutes(-10).Ticks]
ZADD recentitems [DateTime.Now.Ticks] [item.id]

Чтобы получить идентификаторы предметов, добавленных за последние 10 минут:

ZREVRANGEBYSCORE recentitems [DateTime.Now.Ticks] [DateTime.Now.AddMinutes(-10).Ticks]

Обратите внимание, что вы также можете использовать

ZREVRANGE recentitems 0 -1 

, если не возражаете, что наборможет включать более старые элементы, если недавно ничего не было добавлено.

Появится список идентификаторов элементов.Затем вы используете GET / MGET / HGET / HMGET в зависимости от ситуации, чтобы получить фактические элементы для отображения.

2 голосов
/ 15 июня 2011

Если вы хотите, чтобы ключи redis автоматически удалялись, вам, вероятно, следует использовать ключ redis для каждой карты user_id-to-product_id.Таким образом, вы должны написать что-то вроде redis.set "user-to-products:user_id:product_id", timestamp, за которым следует redis.expire "user-to-products:user_id:product_id" 86400 (24 часа, в секундах).

Чтобы получить текущий список, вы должны быть в состоянии сделать redis.keys "user-to-products:user_id:*"

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