浅谈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 27 Redis
Redis5之后版本的高可用集群搭建的实现
Apr 27 Redis
浅谈Redis的几个过期策略
May 27 Redis
了解Redis常见应用场景
Jun 23 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
浅谈Redis位图(Bitmap)及Redis二进制中的问题
Jul 15 Redis
Redis中一个String类型引发的惨案
Jul 25 Redis
Redis入门教程详解
Aug 30 Redis
基于Redis结合SpringBoot的秒杀案例详解
Oct 05 Redis
在Centos 8.0中安装Redis服务器的教程详解
Mar 21 Redis
Redis 操作多个数据库的配置的方法实现
Mar 23 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
融入意大利的咖啡文化
2021/03/03 咖啡文化
php curl请求信息和返回信息设置代码实例
2015/04/27 PHP
CI框架常用方法小结
2016/05/17 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
用cssText批量修改样式
2009/08/29 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
js密码强度检测
2016/01/07 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
Javascript读写cookie的实例源码
2019/03/16 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
Python smallseg分词用法实例分析
2015/05/28 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
Python猜数字算法题详解
2020/03/01 Python
python中有函数重载吗
2020/05/28 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
CSS3 文字动画效果
2020/11/12 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
简单的JAVA编程面试题
2013/03/19 面试题
奥利奥广告词
2014/03/20 职场文书
请假条范文大全
2014/04/10 职场文书
解除同居协议书
2015/01/29 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
pt-archiver 主键自增
2022/04/26 MySQL