我如何在Redis中存储它?

时间:2011-06-14 06:13:42

标签: database model schema redis

我有很多产品(product_id)。用户(user_id)查看产品。

我想查询哪些用户查看了过去24小时内的任何产品。 (换句话说,我想保留一个附加到该product_id的user_id列表......当用户24小时后,该用户弹出该列表并且记录消失)

如何将其存储在Redis中?有人可以给我一个高级架构,因为我是Redis的新手。

2 个答案:

答案 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:*"