浅谈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 查看所有的key方式
May 07 Redis
详解Redis主从复制实践
May 19 Redis
了解Redis常见应用场景
Jun 23 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
浅谈Redis的keys命令到底有多慢
Oct 05 Redis
Redis高并发防止秒杀超卖实战源码解决方案
Nov 01 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
Redis+Lua脚本实现计数器接口防刷功能(升级版)
Feb 12 Redis
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Mar 16 Redis
redis数据一致性的实现示例
Mar 18 Redis
利用Redis实现点赞功能的示例代码
Jun 28 Redis
redis限流的实际应用
Apr 24 #Redis
Redis安装启动及常见数据类型
redis配置文件中常用配置详解
Apr 14 #Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
浅谈redis五大数据结构和使用场景
Redis如何一键部署脚本
redis连接被拒绝的解决方案
You might like
php 字符串替换的方法
2012/01/10 PHP
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
初探nodeJS
2017/01/24 NodeJs
jquery实现简单实用的轮播器
2017/05/23 jQuery
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
django配置app中的静态文件步骤
2020/03/27 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
无故旷工检讨书
2014/01/26 职场文书
大学感恩节活动总结
2015/05/05 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android