浅谈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 IP地址的绑定的实现
May 08 Redis
解析高可用Redis服务架构分析与搭建方案
Jun 20 Redis
浅谈Redis位图(Bitmap)及Redis二进制中的问题
Jul 15 Redis
缓存替换策略及应用(以Redis、InnoDB为例)
Jul 25 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
Redis RDB技术底层原理详解
Sep 04 Redis
Redis三种集群模式详解
Oct 05 Redis
详解Redis在SpringBoot工程中的综合应用
Oct 16 Redis
redis数据一致性的实现示例
Mar 18 Redis
redis 解决库存并发问题实现数量控制
Apr 08 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 Redis
如何使用注解方式实现 Redis 分布式锁
Jul 23 Redis
redis限流的实际应用
Apr 24 #Redis
Redis安装启动及常见数据类型
redis配置文件中常用配置详解
Apr 14 #Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
浅谈redis五大数据结构和使用场景
Redis如何一键部署脚本
redis连接被拒绝的解决方案
You might like
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
PHP获取网卡地址的代码
2008/04/09 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python实现线程池代码分享
2015/06/21 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
python两种注释用法的示例
2020/10/09 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
单位介绍信范文
2014/01/18 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
给老师的一封建议书
2014/03/13 职场文书
实习协议书范本
2014/04/22 职场文书
信用卡工作证明模板
2014/09/14 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis