Для чего-то подобного я использую отсортированный набор со значениями, являющимися идентификаторами пользователя, и счетом, являющимся текущим временем.При обновлении набора удалите старые элементы с помощью 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 в зависимости от ситуации, чтобы получить фактические элементы для отображения.