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…

php 游标 上移,jQuery点击input使光标移动到最后或指定位置

你要知道面对一个 处女座的 需求者, focus()是远远不够的。 比如说“我点进去的时候光标要在最后,这样我就不用再把光标移动到最后去添加东西了。” oh,让我先撞下墙。 我们需要扩展jQuery: //光标放在最后 $("#文本框ID").textFoc…

nginx 代理

nginx 代理: server { listen 80; server_name yiitest yiitest.com; error_log /var/log/www/yiitest_error.log; access_log /data/logs/nginx/wslm_access.log; root /home/bear/www/yiitest; # 如果全部的请求都代理到别的服务器上了,就可以不用写这…

在java中goto是意思,关于Java中的goto语句

自学Java遇到的问题1goto语句的问题1.1 背景2.1 尝试3.1 总结goto语句的问题今天是我自学Java第4天,开始写博客记录学习中遇到的问题。给后来者一些借鉴,也给自己以后回过来在看这些问题提供资料。1.1 背景我是先自学过一段时间C,然后隔了很长…

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

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

php备投程序,php投票小程序

PHP投票小程序,防超时,防IP限制1.[代码][PHP]代码//欢迎访问back.zhizhi123.com//参考博文http://www.zhizhi123.com/?p126set_time_limit(0);//防止超时function toupiao($i){$proxy array(182.48.116.51:8080,110.177.63.191:9999,221.10.40.238:80,…

登录注册实现(服务器数据)

1 <?xml version"1.0" encoding"utf-8"?>2 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"3 android:layout_width"fill_parent"4 android:layout_height"fill_parent"5 …

java与android https,java – Https连接Android

我做一个猜测&#xff0c;但如果你想要一个实际的握手发生&#xff0c;你必须让Android知道你的证书。如果你想只接受无论什么&#xff0c;然后使用这个伪代码来获得你需要与Apache HTTP客户端&#xff1a;SchemeRegistry schemeRegistry new SchemeRegistry ();schemeRegistr…

84. Largest Rectangle in Histogram

/** 84. Largest Rectangle in Histogram * 2016-5-13 by Mingyang* 这里并不需要两个stack&#xff0c;只需要一个stack&#xff0c;装的是递增序列的index* 直到遇到一个递减的时候&#xff0c;弹出来&#xff0c;求一个一个的面积大小* 不过注意的是最后如果以递增的序列结尾…

收件箱java项目源码,Java物资管理系统项目源码(含数据库).zip

.mymetadata , 279.project , 1408│╠╨≥╩╣╙├╦╡├≈.doc , 99840.settings/.jsdtscope , 500.settings/org.eclipse.jdt.core.prefs , 330.settings/org.eclipse.wst.jsdt.ui.superType.container , 49.settings/org.eclipse.wst.jsdt.ui.superType.name , 6src/Applic…

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

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

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

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

java 自定义标签 rtexprvalue,java自定义标签

三步&#xff1a;一、自定义标签实现类&#xff1a; myTags.java;二、自定义标签库文件(TLD): myTags.tld;三、一个JSP页面&#xff1a;随便写了;首先myTags.javapackage com.tags;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.ser…

Enum遇到下拉框

package com.zj.tool;public enum WeekDay {Mon("Monday",1),Tue("Tuesday",2),Wed("Wednesday",3),Thu("Thursday",4),Fri("Friday",5),Sat("Saturday",6),Sun("Sunday",7);/**定义枚举类型自己的属性…

dede plus ad js.php,织梦dedecms/plus/文件夹的功能介绍

/plus /–插件及辅助功能目录后台系统插件和辅助功能文件存放目录&#xff0c;你有什么辅助功能或者第三方开发的插件你需要用那么久需要放在这个文件夹中&#xff0c;文件夹中有dedecms自带的常用插件&#xff1a;plus 系统插件存放目录guestbook 留言板插件ad_js.php 广告…

今天觉得自己好像比较紧张

因为每天早上都是想着公司的事情&#xff0c;就怕自己做不成什么就早早的醒了&#xff0c;有时还要继续睡 转载于:https://www.cnblogs.com/bkchengzheng/p/5500224.html

vertex shader(5)

先挖个坑 &#xff0c;以后填。。。转载于:https://www.cnblogs.com/ll-10/p/5502767.html

php 固话验证,收货地址参数校验:收货人、邮编、地址、手机、固话等

收货地址参数校验&#xff1a;收货人、邮编、地址、手机、固话等.收货人&#xff1a;function checkshr() {var shr $(#shr).val();if (shr.length < 0) {$(#shrmsg).show().html(\u6536\u8d27\u4eba\u4e0d\u80fd\u4e3a\u7a7a!);return false;}if (shr.length 14) {$(#shr…

php获取悉尼时间,php在使用澳大利亚/悉尼时区时给出错误答案

为什么它说5,为什么这在技术上是正确的在Sydney,DST开始于2013-10-06 02:00:00 – 所以你跨越那个日期会失去一个小时.当你调用strtime时,它会将时间解释为悉尼时间,但返回一个Unix时间戳.如果您将第二组时间戳转换为UTC,则会得到2013-09-30 14:00:00到2013-10-06 13:00:00的范…

动画---图形图像与动画(三)Animation效果的XML实现

使用XML来定义Tween Animation 动画的XML文件在工程中res/anim目录&#xff0c;这个文件必须包含一个根元素&#xff0c;可以使<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中&#xff0c;默认情况下&#…