redis里有一种很特殊的数据类型——有序集合。之前我们学过的集合的概念是,集合里所有元素都是唯一的、无序的。但这里怎么出现了有序集合,他是怎么来实现有序的呢?
有序集合里元素还是唯一的,但会给每个元素设置一个socre(分值),通过这个分值来实现有序的。如下图所示:

有序集合API
下面介绍几个有序集合的API,实现排行榜功能需要知道这些API的用法。
zAdd
我们想设置一个球员2k能力值的有序列表,使用球员名为元素,能力值为scores。
库里的投射能力为100,詹姆斯为92,哈登为96,保罗为97
sadd一次可以添加1个或多个元素
127.0.0.1:6379[1]> zadd 2kplayer:shoot 100 curry (integer) 1 127.0.0.1:6379[1]> zadd 2kplayer:shoot 92 james 96 harden 97 paul (integer) 3
zIncrBy
这一个月来,哈登连续爆种,疯狂连续砍高分,那么,2k决定将他的投射能力值提高2点
127.0.0.1:6379[1]> zincrby 2kplayer:shoot 2 harden "98"
zRange、zRevRange
现在我们想知道能力值前3名的球员是哪3个。
127.0.0.1:6379[1]> zrange 2kplayer:shoot 0 2 withscores 1) "james" 2) "92" 3) "paul" 4) "97" 5) "harden" 6) "98"
redis默认采用正序,分值从小到大排序。所以我们需要使用zRevRange
127.0.0.1:6379[1]> zrevrange 2kplayer:shoot 0 2 withscores 1) "curry" 2) "100" 3) "harden" 4) "98" 5) "paul" 6) "97"
zUnionStore
海科智能企业建站系统棕色风格4.3
海科智能企业建站系统采用asp+access进行开发,软件支持一键生*站html静态页面,软件包含完整的前后台程序,可直接进行使用。
0
查看详情
2k能力值是有多方面的,投射只是其中一项,速度、上篮等都是能力值的一部分。
127.0.0.1:6379[1]> zadd 2kplayer:speed 99 james 90 paul 90 curry 93 harden (integer) 4
这时候,想知道球员综合能力值的话,就需要将每一项的得分都加起来
127.0.0.1:6379[1]> zunionstore 2kplayer 2 2kplayer:shoot 2kplayer:speed (integer) 4 127.0.0.1:6379[1]> zrange 2kplayer 0 -1 withscores 1) "paul" 2) "187" 3) "curry" 4) "190" 5) "harden" 6) "191" 7) "james" 8) "191"
实现排行榜系统
场景如下:一个视频点播系统,每天观看的人很多。该系统有个榜单功能,展示观看量最多的视频。分为今日榜单、三日榜单、一周排行、月榜单。
思路:首先是按天统计视频观看次数,然后再统计出今日榜单、三日榜单等。
统计视频观看次数的伪代码如下:
// 观看视频
function view ($videoId)
{
$key = 'video:view:'.date('Y-m-d');
if (!$redis->exists($key)) {
$redis->zIncrBy($key, 1, $videoId);
$redis->expire($key, 86400 * 30);
}
$redis->zIncrBy($key, 1, $videoId);
}今日最热
今日最热有一个注意点,当新的一天刚开始时,数据可能为空或很少。所以,我们可以将今日和昨日的数据合并起来,但将今日的数据权重设高些。
今日最热功能实现伪代码如下:
function todayHot ()
{
$tokeyKey = 'video:view:'.date('Y_m_d');
$yesKey = 'video:view:'. date('Y_m_d', time() - 86400);
$keyUnion = "view:rank:today";
$redis->zUnionStore($keyUnion, [$tokeyKey, $yesKey], [10, 1]);
// 取前100名
return $redis->zRevRange($keyUnion, 0, 99);
}三日榜单
function threeHot ()
{
$keyUnion = 'view:rank:three';
$unionKeys = [];
for ($i=0; $i < 3; $i++) {
$unionKeys[] = 'video:view:'.date('Y_m_d', time() - 86400 *$i);
}
$redis->zUnionStore($keyUnion, $unionKeys);
return $redis->zRevRange($keyUnion, 0, 99, true);
}周榜单、月榜单等和三日榜单的思路完成一样,所以就不贴出代码了。
以上就是使用Redis完成排行榜系统的详细内容,更多请关注其它相关文章!
# 榜单
# 今日
# Redis
# 如何实现
# 嘉兴短视频seo优化
# 斗鱼怎么实现推广营销的
# 德化县网站建设的公司
# 松岗哪些网站优化
# 网络带宽
# 来实现
# 想知道
# 分值
# 最热
# 三日
# 建站系统
# 银川网站设计建设
# seo培训推荐引流
# 新能源网站优化哪个好点
# 集团网站建设好吗
# 海南建设官方网站
# 爱站网seo电脑
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
byrutor直接访问入口 byrutor官方游戏库
海棠阅读登录教程_详细讲解海棠登录操作
mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程
使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel
ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算
《虎扑》关闭社区内容推荐方法
《海豚家》注销账号方法
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
Highcharts雷达图轴线交点数值标注指南
不吃碳水化合物是健康减肥的好办法吗
WooCommerce购物车:强制显示所有交叉销售商品教程
悟空浏览器网页版链接 悟空浏览器网页版最新有效地址
虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口
《美篇》取消会员自动续费方法
《伊瑟》凶影追缉库卢鲁boss攻略
Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例
批改网官网首页登录 批改网学生用户登录入口
realme 10 Pro息屏方案_realme 10 Pro省电策略
视频号视频怎么免费保存到相册?保存到相册需要注意什么?
如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?
夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】
酷狗音乐多音轨设置教程
鸣潮历史学家灯塔位置一览
优化 WooCommerce 产品价格显示与自定义短代码集成
个人所得税办理入口 个人所得税综合所得年度汇算入口
豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】
J*aScript与HTML元素交互:图片点击事件与链接处理教程
12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案
顺丰快递收费标准查询_如何查看顺丰最新收费价格
鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】
《单词速记宝》设置学习计划方法
iphone16系列配置参数介绍
免费占卜在线神算_免费占卜手机神算
《浙里办》电子发票开具方法
cad视图选项卡不见了怎么办_cad视图标签恢复显示方法
多闪APP官方下载安装入口_多闪最新版本获取入口
蜻蜓FM如何设置移动流量播放
如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色
研招网官方网站招生平台入口_中国研究生招生信息网官网登录
键盘保修需要什么_键盘售后维修流程
邮编号码查询app有哪些_邮编号码查询推荐app及使用体验
苹果官网国补入口在哪
SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱
易车网官网直达入口 易车网在线登录入口
《王者荣耀世界》英雄获取攻略
Win11怎么开启HDR_Windows 11显示器画质增强设置
获取WooCommerce产品在后台编辑页面的分类ID
Chart.js 教程:自定义插件实现图表与图例间距调整
Dash应用中自定义HTML页面标题与网站图标(F*icon)的实用指南
服装短视频如何起号推广?服装短视频起号推广有什么要求?
2020-05-14
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。