许多网站都有排行榜的功能,比如球员人气榜单、阅读排行榜,对于一些小网站,通过查数据库就能实现排行榜的功能,但是对于稍微有点用户量而且还是实时排名的网站,使用一些关系型数据库如(MySQL、Oracle)等来实现就有点力不从心了,而且对数据库的压力也很大,体验也不好,更好的选择是使用Redis就是来做排行榜功能,因为Redis提供的有序集合(zset)非常适合做实时排行榜这个业务。
示例:今天我们就来使用PHP+Redis的zset来实现博客园网站的阅读排行榜功能,博客园的文章阅读排行榜页面如下
假设现在有8篇文章,文章ID分别是1101、1102、1103、1104、1105、1106、1107、1108,我们使用redis的有序集合(zset)的score作为阅读次数来记录每篇文章的阅读量,view_nums作为记录阅读量的key
现在,文章ID为1101、1102、1103、1104、1105、1106、1107、1108的文章分别被读者阅读了12次、245次、6次、99次、1267次、23次,456次,9999次
我们使用PHP代码来实现记录阅读次数,使用的是zIncrBy()方法
上面的这串代码应该放到文章详情页接口里,正常来说每次点击详情页score都应该加1,这里为了演示,一次就增加了很多数。
我们通过Redis Desktop Manager软件来查看目前的阅读量情况
可以发现在redis的view_nums有序集合中,已经按照score的大小默认升序排序了。
现在我们要写一个阅读量前五的文章列表,这里需要使用zRevRange()方法
通过打印的结果可以看到,输出结果是以文章ID为key,值为阅读量的一个数组,并且是按照阅读量降序排序的。
拿到结果之后,我们就可以提取出文章ID,然后从数据库中取出这个几个文章的标题
这里写的是伪代码,具体留给你们自己实现吧
如果该文章对您有帮助,请您点击推荐,感谢。