当前位置:嗨网首页>书籍在线阅读

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的按月份查看文章的功能。