浅谈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 sentinel 频繁主备切换的问题
Apr 12 Redis
Redis6.0搭建集群Redis-cluster的方法
May 08 Redis
基于Redis过期事件实现订单超时取消
May 08 Redis
深入浅析Redis 集群伸缩原理
May 15 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
解决Redis启动警告问题
Feb 24 Redis
Redis 哨兵机制及配置实现
Mar 25 Redis
详解Redis的三种常用的缓存读写策略步骤
May 06 Redis
Redis特殊数据类型Geospatial地理空间
Jun 01 Redis
一文教你快速生成MySQL数据库关系图
Jun 28 Redis
利用Redis实现点赞功能的示例代码
Jun 28 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+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
Javascript实现的分页函数
2006/12/22 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
python中sets模块的用法实例
2014/09/30 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python中的set实现不重复的排序原理
2018/01/24 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
Java程序员综合测试题
2014/04/25 面试题
绿色小区申报材料
2014/08/22 职场文书
幼师小班个人总结
2015/02/12 职场文书
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python