Redis结构按类别存储热门文章

时间:2014-06-24 03:54:33

标签: redis

我正试图找出一种方法,可以在redis中有效地存储和检索按类别划分的文章的受欢迎程度。现在我正在考虑这样的解决方案。

创建一堆哈希来跟踪所有类别中文章的受欢迎程度,其中键是“所有”,年,月或周开始,字段是文章ID,其值为计数器。为了更新文章的受欢迎程度,我将使用HINCRBY来增加该文章的计数器

总体受欢迎的哈希:

all: article_id <counter>  // all time popular
2012: article_id <counter> // popular by year
2012-01: article_id <counter>  // popular by month
2012-01-04: article_id <counter>    // popular by week, where the date is the beginning of the week

为每个类别创建一组哈希,例如下面是&#39; category_1&#39;

的哈希
<category_1>:all: article_id <counter>  // all time popular
<category_1>:2012: article_id <counter> // popular by year
<category_1>:2012-01: article_id <counter>  // popular by month
<category_1>:2012-01-04: article_id <counter>   // popular by week, where the date is the beginning of the week

&#39; category_2&#39;

的另一组
<category_2>:all: article_id <counter>  // all time popular
<category_2>:2012: article_id <counter> // popular by year
<category_2>:2012-01: article_id <counter>  // popular by month
<category_2>:2012-01-04: article_id <counter>   // popular by week, where the date is the beginning of the week 

因此,每当文章的受欢迎程度提高时,我会增加两组哈希值,一组用于整体,另一组用于文章所属的类别。我还没弄清楚如何检索最受欢迎的文章(全天,每年等),甚至不确定是否可以使用&#39;哈希&#39;数据类型。

哈希是否有正确的数据结构?关于如何为此建模解决方案的任何想法都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我认为你会考虑使用有序集而不是哈希。基本上,使用article_id作为成员,使用popular作为分数。为每个时间分辨率保持一个有序集合&amp;类别排列 - 就像你用哈希所描述的那样。这将允许您使用简单ZRANGEBYSCORE按人气(分数)获取文章(设置成员)。要更新热门程度,请执行ZINCRBY