文章目录

  • 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应用场景-排行榜相关推荐

  1. 阿里云Redis典型场景:如何构建可扩展通用排行榜系统

    点击有惊喜 摘要 本文主要介绍通用排行榜的需求功能,并介绍了基于Redis的ZSET数据结构的排序方法,另外探讨了通用排行榜的架构及用户如何通过阿里云Redis解决通用排行架构的技术问题. 背景 移动 ...

  2. 转载:Redis 应用场景

    2019独角兽企业重金招聘Python工程师标准>>> 1.  MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载 ...

  3. redis 数据类型详解 以及 redis适用场景场合

    redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...

  4. 详解 Redis 应用场景及应用实例

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...

  5. Redis 应用场景和应用实例详解

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...

  6. 详解 Redis 应用场景及原理

    本文转自https://blog.csdn.net/niucsd/article/details/50966733,描述了redis实现原理和应用场景,篇幅较长,有意学习redis的同学可耐心阅读. ...

  7. 聊聊 Redis 使用场景 1

    原文地址:Redis实战(五) 聊聊Redis使用场景 博客地址:http://blog.720ui.com/ 使用场景说明 计数器 数据统计的需求非常普遍,通过原子递增保持计数.例如,点赞数.收藏数 ...

  8. redis应用场景及实例

    redis应用场景及实例 前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.在这篇文章中,我们将阐述 Re ...

  9. 【转载】Redis应用场景

    NoSQL主要用于解决以下几种问题 1.少量数据存储,高速读写访问.此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景. 2.海 ...

最新文章

  1. 一文详解CMakeLists文件编写语法规则详解
  2. typeof instanceof 之间的区别总结
  3. (WPF) DataGrid之绑定
  4. java mapfile_基于文件的数据结构:关于MapFile
  5. Jersey中ContainerRequestFilter的使用
  6. 04_使用Influxdb自带函数查询
  7. django中admin的使用
  8. IC卡读卡器在安卓(android)下的开发
  9. 百家讲坛2001-2016年节目播出表-总目录
  10. 计算机辅助翻译 教学大纲,《计算机辅助翻译》本科课程教学大纲翻译本科.doc...
  11. 对单位cps和单位kc的理解
  12. 去痘痘、痘坑的五大误区
  13. 微信小程序支付功能的实现
  14. 五大数据统计分析软件
  15. 报告总监,他...在代码里面 “下毒” 了
  16. 产业转型季运营商现离职潮
  17. 关于福昕阅读器启动速度慢的问题
  18. 乡村振兴谱写新时代与新篇章
  19. C#上位机与PLC通讯源码 C#与三菱PLC串口通讯MC协议FX3U及FX系列
  20. 2.计算机基础知识试题及答案,计算机基础知识试题及答案2

热门文章

  1. ubuntu14.04系统假死及强制关机后产生的问题解决
  2. 【PADS_002】【添加泪滴】
  3. Python暗通道图像去雾
  4. Linux查看DNS
  5. 124-移动端游乐园项目
  6. React + Koa2打造『官方管理后台』10 总结
  7. css隐藏浏览器的x/y轴
  8. 微信公众号快速增粉攻略详解
  9. selenium处理12306登录
  10. Flutter 热更新功能实现