浅谈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 14 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
Redis调用Lua脚本及使用场景快速掌握
Mar 16 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Mar 17 Redis
在Centos 8.0中安装Redis服务器的教程详解
Mar 21 Redis
Redis监控工具RedisInsight安装与使用
Mar 21 Redis
 Redis 串行生成顺序编码的方法实现
Apr 03 Redis
Redis中key的过期删除策略和内存淘汰机制
Apr 12 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 Redis
Redis实战之Lettuce的使用技巧详解
Dec 24 Redis
redis限流的实际应用
Apr 24 #Redis
Redis安装启动及常见数据类型
redis配置文件中常用配置详解
Apr 14 #Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
浅谈redis五大数据结构和使用场景
Redis如何一键部署脚本
redis连接被拒绝的解决方案
You might like
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
Laravel 队列使用的实现
2019/01/08 PHP
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Python语言的变量认识及操作方法
2018/02/11 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
英国香水店:The Perfume Shop
2017/03/27 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
党员三严三实对照检查材料
2014/10/13 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏
docker 制作mysql镜像并自动安装
2022/05/20 Servers
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS