浅谈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 13 Redis
浅谈Redis的几个过期策略
May 27 Redis
详解Redis基本命令与使用场景
Jun 01 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
Windows中Redis安装配置流程并实现远程访问功能
Jun 07 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
Redis 操作多个数据库的配置的方法实现
Mar 23 Redis
Redis分布式锁的7种实现
Apr 01 Redis
浅谈Redis的事件驱动模型
May 30 Redis
Redis实现短信验证码登录的示例代码
Jun 14 Redis
利用Redis实现点赞功能的示例代码
Jun 28 Redis
redis限流的实际应用
Apr 24 #Redis
Redis安装启动及常见数据类型
redis配置文件中常用配置详解
Apr 14 #Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
浅谈redis五大数据结构和使用场景
Redis如何一键部署脚本
redis连接被拒绝的解决方案
You might like
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
新浪的图片新闻效果
2007/01/13 Javascript
jquery $.ajax入门应用二
2008/11/19 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
javascript几个易错点记录
2014/11/26 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
python datetime处理时间小结
2020/04/16 Python
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
制药工程专业职业生涯规划范文
2014/03/10 职场文书
公务员保密承诺书
2014/03/27 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
认错检讨书
2014/10/02 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
宣传稿格式范文
2015/07/23 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python
全网非常详细的pytest配置文件
2022/07/15 Python