浅谈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基于Bitmap实现用户签到功能
Jun 20 Redis
redis使用不当导致应用卡死bug的过程解析
Jul 01 Redis
Redis入门教程详解
Aug 30 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
redis数据结构之压缩列表
Mar 21 Redis
Redis 哨兵机制及配置实现
Mar 25 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
解决 Redis 秒杀超卖场景的高并发
Apr 12 Redis
windows安装 redis 6.2.6最新步骤详解
Apr 26 Redis
Redis 异步机制
May 15 Redis
redis限流的实际应用
Apr 24 #Redis
Redis安装启动及常见数据类型
redis配置文件中常用配置详解
Apr 14 #Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
浅谈redis五大数据结构和使用场景
Redis如何一键部署脚本
redis连接被拒绝的解决方案
You might like
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
PHP完整的日历类(CLASS)
2006/11/27 PHP
php GeoIP的使用教程
2011/03/09 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
php使用MySQL保存session会话的方法
2015/06/26 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
JS作用域深度解析
2016/12/29 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
python实现异步回调机制代码分享
2014/01/10 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
详解python-图像处理(映射变换)
2019/03/22 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
Python模块 _winreg操作注册表
2020/02/05 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
总监职责范文
2013/11/09 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
个人汇报材料范文
2014/12/30 职场文书
档案接收函格式
2015/01/30 职场文书
高中美术教学反思
2016/02/17 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS