我正在尝试找出一种方法,可以随着时间的推移在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
并为每个类别创建一组哈希,例如以下是“ category_1”的哈希
<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
另一组“ category_2”
<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
因此,每当文章的知名度上升时,我都会增加两组哈希,一组用于总体,另一组用于该文章所属的类别。我还没有弄清楚如何检索最受欢迎的文章(始终,每年等),甚至不确定是否可以使用“哈希”数据类型。
哈希是正确的数据结构吗?关于如何为此解决方案建模的任何想法都将有所帮助。
我认为您正在研究使用排序集而不是哈希。基本上,使用article_id作为成员,并使用人气作为得分。保留每个时间分辨率和类别排列的排序集- 就像您用哈希描述的一样。这将允许您使用简单的ZRANGEBYSCORE按受欢迎程度(得分)来获取文章(集合成员)。要更新流行度,请执行ZINCRBY。