我有很多产品(product_id)。用户(user_id)查看产品。
我想查询哪些用户查看了过去24小时内的任何产品。 (换句话说,我想保留一个附加到该product_id的user_id列表......当用户24小时后,该用户弹出该列表并且记录消失)
如何将其存储在Redis中?有人可以给我一个高级架构,因为我是Redis的新手。
答案 0 :(得分:3)
对于类似的东西,我使用一个排序集,其值为用户ID,得分为当前时间。更新集合时,使用ZREMRANGEBYSCORE删除旧项目以及更新当前用户的时间分数。
使用代码更新:
每当添加新项目时:
ZREMRANGEBYSCORE recentitems 0 [DateTime.Now.AddMinutes(-10).Ticks]
ZADD recentitems [DateTime.Now.Ticks] [item.id]
获取最近10分钟内添加的项目ID:
ZREVRANGEBYSCORE recentitems [DateTime.Now.Ticks] [DateTime.Now.AddMinutes(-10).Ticks]
请注意,您也可以使用
ZREVRANGE recentitems 0 -1
如果您不介意该套装可能包含旧项目,如果最近没有添加任何内容。
它会为您提供项目ID列表。然后根据需要使用GET / MGET / HGET / HMGET来检索要显示的实际项目。
答案 1 :(得分:2)
如果您希望redis键自动下降,那么您可能希望为每个user_id-to-product_id映射使用redis键。所以,您可以通过执行类似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:*"