php redis 搜索,PHP+Redis有序集合(zset)实现博客园阅读排行榜功能

许多网站都有排行榜的功能,比如球员人气榜单、阅读排行榜,对于一些小网站,通过查数据库就能实现排行榜的功能,但是对于稍微有点用户量而且还是实时排名的网站,使用一些关系型数据库如(MySQL、Oracle)等来实现就有点力不从心了,而且对数据库的压力也很大,体验也不好,更好的选择是使用Redis就是来做排行榜功能,因为Redis提供的有序集合(zset)非常适合做实时排行榜这个业务。

示例:今天我们就来使用PHP+Redis的zset来实现博客园网站的阅读排行榜功能,博客园的文章阅读排行榜页面如下

0e19d37817bff1c5b44a79d0cccbd055.png

假设现在有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软件来查看目前的阅读量情况

cbab98b0828d07a536e034b82e6c2538.png

可以发现在redis的view_nums有序集合中,已经按照score的大小默认升序排序了。

现在我们要写一个阅读量前五的文章列表,这里需要使用zRevRange()方法

ebdbb8724bd02cf659e79bf195290342.png

通过打印的结果可以看到,输出结果是以文章ID为key,值为阅读量的一个数组,并且是按照阅读量降序排序的。

拿到结果之后,我们就可以提取出文章ID,然后从数据库中取出这个几个文章的标题

这里写的是伪代码,具体留给你们自己实现吧

如果该文章对您有帮助,请您点击推荐,感谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 开发疑难杂症(01)

搜了好多博客,技术网站,答案都不统一,今天偶然发现一个解决方案:这个问题一般是重复导入,使用include的问题,不过iOS一般不用include,所以这个不是正解,还有就是预编译文件&#xff…

cJONS序列化工具解读二(数据解析)

cJSON数据解析 关于数据解析部分,其实这个解析就是个自动机,通过递归或者解析栈进行实现数据的解析 /* Utility to jump whitespace and cr/lf *///用于跳过ascii小于32的空白字符 static const char *skip(const char *in) { while (in && *in…

小米范工具系列之二:小米范 web目录扫描器

最新版本1.1,下载地址:http://pan.baidu.com/s/1c1NDSVe 文件名scandir,请使用java1.8运行 小米范web目录扫描器主要功能是探测web可能存在的目录及文件,界面如下,左侧为发现的url,中间为浏览器&#xff0…

php中介者,PHP设计模式 - 中介者模式

【一】模式定义中介者模式(Mediator)就是用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。对于中介对象而言,所有相互交互的对象,都视…

dedecms模版php,dedecms专题模板怎么用

dedecms专题模板怎么用?DeDeCms的专题相关信息bbs上相对较少,之前查阅了很多资料都未找到其解决方案推荐学习:织梦cms无柰只有靠自己动手丰衣足食;在官方的版本上有这样的一段话:1、文章列表用ID1,ID2,ID3这样形式分开…

Windows中断那些事儿

搞内核研究的经常对中断这个概念肯定不陌生,经常我们会接触很多与中断相关的术语,按照软件和硬件进行分类: 硬件CPU相关: IRQ、IDT、cli&sti 软件操作系统相关: APC、DPC、IRQL 一直以来对中断这一部分内容弄的一知…

(1-1)文件结构的升级(Area和Filter知识总结) - ASP.NET从MVC5升级到MVC6

ASP.NET从MVC5升级到MVC6 总目录 MVC5项目结构 带有Areas和Filter的项目结构 一般来说,小的MVC项目是不考虑领域的,但是,如果是稍微复杂一点的项目,往往是需要领域这个概念的。 一个领域就是一个小型的MVC项目,所以领域…

重启模块与及关开邮件存储设置功能页面-PHP-shell-py

邮件系统几百台,每台负责 grep -P "^ip\d.\d." /home/mymail/newconf/hosts.conf -c465 每台机器负责启动的模块又是不一样的如: A机器: ProgramsList"1svr,2svr,3svr,4svr," b机器: ProgramsList"asvr,…

用IIS配置反向代理

https://natapp.cn/ http://blog.csdn.net/g2321514568/article/details/12406755 目标服务器:targetServer 配置反向代理的服务器:reveseProxServer 1、确定最终访问的网址:比如www.baidu.com 、www.csdn.net等等。 当然你也可以自己在targ…

oracle存储过程使用ftp,ASM存储FTP上传文件

引用SQL>execute dbms_xdb.sethttpport(8080);SQL>execute dbms_xdb.setftpport(2100);SQL>commit;检查端口是否开启引用SQL> select dbms_xdb.GETHTTPPORT() from dual;DBMS_XDB.GETHTTPPORT()----------------------8080SQL> select dbms_xdb.GETFTPPORT() fr…

Python学习笔记——基础篇【第六周】——hashlib模块

常用模块之hashlib模块  用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 hash md5.new() hash.update(admin) print hash.hexdigest() MD5-废弃import shahash sha…

虚拟存储

为解决日益增长的内存需要,有以下几种解决办法: 1.覆盖: 将程序划分成几个模块,将没有调用关系的模块(即不会同时运行的模块)分成一组,其中每组所占的内存大小为组内所需内存最大的模块的内存&a…

作为前端应当了解的Web缓存知识

缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备。对于前端开发者来说,浏览器充当了重要角色。除此外常见的还有各种各样的代理服务器也可以做缓存。当Web请求到达缓存时,缓存从本地副本中提取这个副本内容而不需要经过服务器。…

linux 提取日志字段,记一次Linux下提取MySQL日志关键字段

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?环境说明操作系统:centos7sed版本:4.2.2egrep版本:2.20paste版本:8.22提取要求一次同事说,需要提取MySQ…

1x1 11b g n linux,基于RN1810下的2.4 GHz IEEE 802.11b/g/n无线模块

特性• 符合IEEE 802.11b/g/n的收发器• 2.4 GHz IEEE 802.11n单流1x1• 与主机控制器的UART接口(4线,包括RTS/CTS)• 易于集成到最终产品中——最大程度地减少产品开发工作量,缩短上市时间• 使用简单的ASCII命令进行配置• 带稳压电路、晶振、RF匹配电…

!!“理都懂”为什么“然并卵”?

“理都懂”为什么“然并卵”? 脑子有话讲 收藏(176)| 阅读(17980)以前看见过别人问过这么一个问题:「为什么我们懂得很多道理,却依然过不好这一生?」 知乎上有很多这个问题的不同版本,但其实都说的是同一个事情&#…

linux终端模拟器app下载,3C终端模拟器app下载-3C终端模拟器v0.9最新版下载 - 91手游网...

应用介绍3C终端模拟器是一个终端模拟的app,风格多变,轻松好用,还有功能各异的语句等你来试验,可以在其中运行属于你自己的脚本内容,并且这个软件是不限定使用的,这也就意味着你是否有ROOT并不影响这个软件的…

【VS开发】static、extern分析总结

引用请注明出处:http://blog.csdn.net/int64ago/article/details/7396325 对于写了很多小程序的人,可能static和extern都用的很少,因为static和extern通常在工程量很大时候才能体现优势很必要性,这就不奇怪linux内核代码中“泛滥”…

android 画布心形,Android CustomShapeImageView对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等...

Android CustomShapeImageView对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等Android CustomShapeImageView是github上一个第三方开源的对图片进行各种样式裁剪的库,其要实现的功能如图所示:Android CustomShap…

iOS开发UI篇-在UItableview中实现加载更多功能

iOS开发UI篇-在UItableview中实现加载更多功能 一、实现效果 点击加载更多按钮,出现一个加载图示,三秒钟后添加两条新的数据。 二、实现代码和说明 当在页面(视图部分)点击加载更多按钮的时候,主页面&#…