26-实践
3.6.3 实践
1.实现按点击量排序
要按照文章的点击量排序,就必须再额外使用一个有序集合类型的键来实现。在这个键中以文章的 ID 作为元素,以该文章的点击量作为该元素的分数。将该键命名为 posts:page.view ,每次用户访问一篇文章时,博客程序就通过 ZINCRBY posts:page. view 1文章ID 更新访问量。
需要按照点击量的顺序显示文章列表时,有序集合的用法与列表的用法大同小异:
$postsPerPage = 10
$start = ($currentPage - 1) * $postsPerPage
$end = $currentPage * $postsPerPage - 1
$postsID =ZREVRANGE posts:page.view, $start,$end
for each $id in $postsID
$postData =HGETALL post:$id
print 文章标题:$postData.title
另外3.2节介绍过使用字符串类型键 post: 文章ID :page.view 来记录单个文章的访问量,现在这个键已经不需要了,想要获得某篇文章的访问量可以通过 ZSCORE posts:page. view 文章ID来实现。
2.改进按时间排序
3.4节介绍了每次发布新文章时都将文章的ID加入到名为 posts:list 的列表类型键中来获得按照时间顺序排列的文章列表,但是由于列表类型更改元素的顺序比较麻烦,而如今不少博客系统都支持更改文章的发布时间,为了让小白的博客同样支持该功能,我们需要一个新的方案来实现按照时间顺序排列文章的功能。
为了能够自由地更改文章发布时间,可以采用有序集合类型代替列表类型。自然地,元素仍然是文章的ID,而此时元素的分数则是文章发布的Unix时间14。通过修改元素对应的分数就可以达到更改时间的目的。
14 Unix时间指UTC时间1970年1月1日0时0分0秒起至现在的总秒数(不包括闰秒)。为什么是1970年呢?因为Unix在1970年左右诞生。
另外借助 ZREVRANGEBYSCORE 命令还可以轻松获得指定时间范围的文章列表,借助这个功能可以实现类似WordPress的按月份查看文章的功能。