浅谈Redis在直播场景的实践方案


Posted in Redis onApril 27, 2021

背景信息

视频直播间作为直播系统对外的表现形式,是整个系统的核心之一。除了视频直播窗口外,直播间的在线用户、礼物、评论、点赞、排行榜等数据信息时效性高,互动性强,对系统时延有着非常高的要求,非常适合使用Redis缓存服务来处理。
本篇最佳实践将向您展示使用Redis版搭建视频直播间信息系统的示例。您将了解三类信息的构建方法:

  • 实时排行类信息
  • 计数类信息
  • 时间线信息

实时排行类信息

实时排行类信息包含直播间在线用户列表、各种礼物的排行榜、弹幕消息(类似于按消息维度排序的消息排行榜)等,适合使用Redis中的有序集合(sorted set)结构进行存储。
Redis集合使用空值散列表(hash table)实现,因此对集合的增删改查操作的时间复杂度都是O(1)。有序集合中的每个成员都关联一个分数(score),可以方便地实现排序等操作。下面以增加和返回弹幕消息为例对有序集合在直播间信息系统中的实际运用进行说明。

以unix timestamp+毫秒数为分值,记录user55的直播间增加的5条弹幕:

redis> ZADD user55:_danmu 1523959031601166 message111111111111
(integer) 1
11.160.24.14:3003> ZADD user55:_danmu 1523959031601266 message222222222222
(integer) 1
11.160.24.14:3003> ZADD user55:_danmu 1523959088894232 message33333
(integer) 1
11.160.24.14:3003> ZADD user55:_danmu 1523959090390160 message444444
(integer) 1
11.160.24.14:3003> ZADD user55:_danmu 1523959092951218 message5555
(integer) 1

返回最新的3条弹幕信息:

redis> ZREVRANGEBYSCORE user55:_danmu +inf -inf LIMIT 0 3
1) "message5555"
2) "message444444"
3) "message33333"

返回指定时间段内的3条弹幕信息:

redis> ZREVRANGEBYSCORE user55:_danmu 1523959088894232 -inf LIMIT 0 3
1) "message33333"
2) "message222222222222"
3) "message111111111111"

计数类信息

计数类信息以用户相关数据为例,有未读消息数、关注数、粉丝数、经验值等等。这类消息适合以Redis中的散列(hash)结构进行存储。比如关注数可以用如下的方法处理:

redis> HSET user:55 follower 5
(integer) 1
redis> HINCRBY user:55 follower 1 //关注数+1
(integer) 6 
redis> HGETALL user:55
1) "follow"
2) "6"

时间线信息

时间线信息是以时间为维度的信息列表,典型有主播动态、新帖等。这类信息是按照固定的时间顺序排列,可以使用列表(list)或者有序列表来存储,示例如下:

redis> LPUSH user:55_recent_activitiy  '{datetime:201804112010,type:publish,title:开播啦,content:加油}'
(integer) 1
redis> LPUSH user:55_recent_activitiy '{datetime:201804131910,type:publish,title:请假,content:抱歉,今天有事鸽一天}'
(integer) 2
redis> LRANGE user:55_recent_activitiy 0 10
1) "{datetime:201804131910,type:publish,title:\xe8\xaf\xb7\xe5\x81\x87\",content:\xe6\x8a\xb1\xe6\xad\x89\xef\xbc\x8c\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x9c\x89\xe4\xba\x8b\xe9\xb8\xbd\xe4\xb8\x80\xe5\xa4\xa9}"
2) "{datetime:201804112010,type:publish,title:\xe5\xbc\x80\xe6\x92\xad\xe5\x95\xa6,content:\xe5\x8a\xa0\xe6\xb2\xb9}"

到此这篇关于浅谈Redis在直播场景的实践方案的文章就介绍到这了,更多相关Redis 直播场景实践内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Redis 相关文章推荐
redis 限制内存使用大小的实现
May 08 Redis
redis三种高可用方式部署的实现
May 11 Redis
比较几种Redis集群方案
Jun 21 Redis
使用redis生成唯一编号及原理示例详解
Sep 15 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
Redis集群节点通信过程/原理流程分析
Mar 18 Redis
Redis如何实现验证码发送 以及限制每日发送次数
Apr 18 Redis
Redis入门基础常用操作命令整理
Jun 01 Redis
Redis全局ID生成器的实现
Jun 05 Redis
Redis+AOP+自定义注解实现限流
Jun 28 Redis
redis lua限流算法实现示例
Jul 15 Redis
Redis主从复制操作和配置详情
Sep 23 Redis
redis限流的实际应用
Apr 24 #Redis
Redis安装启动及常见数据类型
redis配置文件中常用配置详解
Apr 14 #Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
浅谈redis五大数据结构和使用场景
Redis如何一键部署脚本
redis连接被拒绝的解决方案
You might like
解析php中static,const与define的使用区别
2013/06/18 PHP
php简单获取目录列表的方法
2015/03/24 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
Python中的ConfigParser模块使用详解
2015/05/04 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
pycharm安装图文教程
2017/05/02 Python
Python3 操作符重载方法示例
2017/11/23 Python
Python退火算法在高次方程的应用
2018/07/26 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
市三好学生主要事迹
2014/01/28 职场文书
个人校本研修方案
2014/05/26 职场文书
会计学习心得体会
2014/09/09 职场文书
模范教师事迹材料
2014/12/16 职场文书
个人培训总结
2015/03/05 职场文书
英文慰问信范文
2015/03/24 职场文书
读书笔记格式
2015/07/02 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python