浅谈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连接被拒绝的解决方案
Apr 12 Redis
Redis数据结构之链表与字典的使用
May 11 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
解析高可用Redis服务架构分析与搭建方案
Jun 20 Redis
厉害!这是Redis可视化工具最全的横向评测
Jul 15 Redis
Redis的字符串是如何实现的
Oct 24 Redis
Redis之RedisTemplate配置方式(序列和反序列化)
Mar 13 Redis
redis数据一致性的实现示例
Mar 18 Redis
Redis监控工具RedisInsight安装与使用
Mar 21 Redis
解决redis批量删除key值的问题
Mar 23 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
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
JavaScript入门学习书籍推荐
2008/06/12 Javascript
Prototype String对象 学习
2009/07/19 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
护理个人求职信范文
2014/01/08 职场文书
宣传普通话标语
2014/06/27 职场文书
英语系毕业生求职信
2014/07/13 职场文书
庆祝教师节标语
2014/10/09 职场文书
关于环保的宣传稿
2015/07/23 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android