Redis应用场景-排行榜
文章目录
- Redis应用场景-排行榜
- 前言
- 排行榜
- 今日热搜
- 热门视频排行榜
- 周歌曲点播榜
- 参考文档
Redis应用场景-排行榜
前言
使用Redis的有序集合(Sorted set)可以很方便地实现排行榜(Leaderboard)的功能。
本文使用redi-cli来演示示例代码,为了让redis-cli可以正常显示中文需要用redis-cli --raw
来连接Redis server。
排行榜
今日热搜
B站的今日热搜关键词
特点:只需要显示排名和关键词,通常不需要显示额外信息。
# 模拟今日热搜排行榜
zadd bilibili:hotsearch:20200529 10000 "FPX TES出线"
zadd bilibili:hotsearch:20200529 9000 "《燃烧》B站播出"
zadd bilibili:hotsearch:20200529 8000 "传闻中的陈芊芊"
zadd bilibili:hotsearch:20200529 7000 "花少北 节奏天才"
zadd bilibili:hotsearch:20200529 6000 "老番茄"
zadd bilibili:hotsearch:20200529 5000 "火影忍者手游"
zadd bilibili:hotsearch:20200529 4000 "Knight妖姬3V5"
zadd bilibili:hotsearch:20200529 3000 "Sour Candy"
zadd bilibili:hotsearch:20200529 2000 "月上重火"
zadd bilibili:hotsearch:20200529 1000 "无主之地2"# 查看排名
zrevrange bilibili:hotsearch:20200529 0 -1# 模拟提升某个关键词的搜索次数
zincrby bilibili:hotsearch:20200529 3500 "火影忍者手游"# 查看排名
zrevrange bilibili:hotsearch:20200529 0 -1# 只显示前5名关键词
zrevrange bilibili:hotsearch:20200529 0 4# 同时显示分数
zrevrange bilibili:hotsearch:20200529 0 4 withscores
热门视频排行榜
B站的全站热门视频排行榜
特点:除了显示排名外,还需要显示综合得分、视频信息和up主信息。
如果要包含较多的信息可以使用json字符串或者Redis hashes,关于这两者的比较参见:
- https://stackoverflow.com/questions/16375188/redis-strings-vs-redis-hashes-to-represent-json-efficiency
使用json字符串方式:
# 模拟视频信息
set bilibili:vedioinfo:BV1000 '{"id": "BV1000", "title": "妹子被告白后当场牺牲", "authorName": "凉风Kaze", "followerCount": 6402000, "score": 1949524, "commentCount": 47000}'
set bilibili:vedioinfo:BV2000 '{"id": "BV2000", "title": "我不能呼吸了", "authorName": "观察者网", "followerCount": 4096000, "score": 1720760, "commentCount": 13000}'
set bilibili:vedioinfo:BV3000 '{"id": "BV3000", "title": "北子哥教我拍土味?", "authorName": "轮回", "followerCount": 2001000, "score": 1535388, "commentCount": 51000}'
set bilibili:vedioinfo:BV4000 '{"id": "BV4000", "title": "如何把投资人当韭菜割", "authorName": "硬核的半佛仙人", "followerCount": 3946000, "score": 1470088, "commentCount": 8072}'# 模拟B站全站热门视频排行榜
zadd bilibili:hotvedios:20200529 1949524 BV1000
zadd bilibili:hotvedios:20200529 1720760 BV2000
zadd bilibili:hotvedios:20200529 1535388 BV3000
zadd bilibili:hotvedios:20200529 1470088 BV4000# 查看前3名
zrevrange bilibili:hotvedios:20200529 0 2# 在排行榜中展示视频信息
get bilibili:vedioinfo:BV1000
get bilibili:vedioinfo:BV2000
get bilibili:vedioinfo:BV3000# 视频详情页查看该视频的排名
zrevrank bilibili:hotvedios:20200529 BV1000# 视频详情页查看该视频的综合得分
zscore bilibili:hotvedios:20200529 BV1000# 模拟视频下架
del bilibili:vedioinfo:BV2000
zrem bilibili:hotvedios:20200529 BV2000# 查看前3名
zrevrange bilibili:hotvedios:20200529 0 2
使用Redis hashes方式:
# 模拟视频信息
hmset bilibili:vedioobj:BV1000 id "BV1000" title "妹子被告白后当场牺牲" authorName "凉风Kaze" followerCount 6402000 score 1949524 commentCount 47000# 查看视频详情
hgetall bilibili:vedioobj:BV1000
周歌曲点播榜
KTV的周歌曲点播榜
特点:需要将多个排行榜合并成一个排行榜
# 模拟每一天的歌曲点播榜
zadd ktv:hotmusic:daily:20200525 1000 "冰雨" 900 "吻别" 800 "过火" 700 "海阔天空" 600 "青藏高原"
zadd ktv:hotmusic:daily:20200526 1000 "盛夏的果实" 900 "成都" 800 "想太多" 700 "一生一世" 600 "天路"
zadd ktv:hotmusic:daily:20200527 1000 "同桌的你" 900 "笑着笑着就哭了" 800 "精忠报国" 700 "笨小孩" 600 "对面的女孩看过来"
zadd ktv:hotmusic:daily:20200528 1000 "笑着笑着就哭了" 900 "成都" 800 "海阔天空" 700 "青藏高原" 600 "吻别"
zadd ktv:hotmusic:daily:20200529 1000 "送别" 900 "世界的尽头" 800 "木马" 700 "选择" 600 "听海"
zadd ktv:hotmusic:daily:20200530 1000 "偏偏喜欢你" 900 "星语星愿" 800 "笔记本" 700 "爱" 600 "想太多"
zadd ktv:hotmusic:daily:20200531 1000 "南方姑娘" 900 "此去经年" 800 "大海" 700 "成都" 600 "桃花一朵朵"# 周排行榜
zunionstore ktv:hotmusic:weekly:2020-W22 7 ktv:hotmusic:daily:20200525 ktv:hotmusic:daily:20200526 ktv:hotmusic:daily:20200527 ktv:hotmusic:daily:20200528 ktv:hotmusic:daily:20200529 ktv:hotmusic:daily:20200530 ktv:hotmusic:daily:20200531# 查看周排名,默认为根据总和sum来合并后排序
zrevrange ktv:hotmusic:weekly:2020-W22 0 4 withscores
参考:
- What’s the Current Week Number?
参考文档
- Redis Sorted set
- How to Implement a Simple Redis Leaderboard
- Use Cases: Leaderboards
Redis应用场景-排行榜相关推荐
- 阿里云Redis典型场景:如何构建可扩展通用排行榜系统
点击有惊喜 摘要 本文主要介绍通用排行榜的需求功能,并介绍了基于Redis的ZSET数据结构的排序方法,另外探讨了通用排行榜的架构及用户如何通过阿里云Redis解决通用排行架构的技术问题. 背景 移动 ...
- 转载:Redis 应用场景
2019独角兽企业重金招聘Python工程师标准>>> 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载 ...
- redis 数据类型详解 以及 redis适用场景场合
redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...
- 详解 Redis 应用场景及应用实例
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...
- Redis 应用场景和应用实例详解
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...
- 详解 Redis 应用场景及原理
本文转自https://blog.csdn.net/niucsd/article/details/50966733,描述了redis实现原理和应用场景,篇幅较长,有意学习redis的同学可耐心阅读. ...
- 聊聊 Redis 使用场景 1
原文地址:Redis实战(五) 聊聊Redis使用场景 博客地址:http://blog.720ui.com/ 使用场景说明 计数器 数据统计的需求非常普遍,通过原子递增保持计数.例如,点赞数.收藏数 ...
- redis应用场景及实例
redis应用场景及实例 前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.在这篇文章中,我们将阐述 Re ...
- 【转载】Redis应用场景
NoSQL主要用于解决以下几种问题 1.少量数据存储,高速读写访问.此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景. 2.海 ...
最新文章
- 一文详解CMakeLists文件编写语法规则详解
- typeof instanceof 之间的区别总结
- (WPF) DataGrid之绑定
- java mapfile_基于文件的数据结构:关于MapFile
- Jersey中ContainerRequestFilter的使用
- 04_使用Influxdb自带函数查询
- django中admin的使用
- IC卡读卡器在安卓(android)下的开发
- 百家讲坛2001-2016年节目播出表-总目录
- 计算机辅助翻译 教学大纲,《计算机辅助翻译》本科课程教学大纲翻译本科.doc...
- 对单位cps和单位kc的理解
- 去痘痘、痘坑的五大误区
- 微信小程序支付功能的实现
- 五大数据统计分析软件
- 报告总监,他...在代码里面 “下毒” 了
- 产业转型季运营商现离职潮
- 关于福昕阅读器启动速度慢的问题
- 乡村振兴谱写新时代与新篇章
- C#上位机与PLC通讯源码 C#与三菱PLC串口通讯MC协议FX3U及FX系列
- 2.计算机基础知识试题及答案,计算机基础知识试题及答案2