浅谈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实现订单自动过期功能的示例代码
May 08 Redis
redis实现共同好友的思路详解
May 26 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
Redis RDB技术底层原理详解
Sep 04 Redis
Redis读写分离搭建的完整步骤
Sep 14 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
Redis监控工具RedisInsight安装与使用
Mar 21 Redis
Redis分布式锁的7种实现
Apr 01 Redis
Redis如何实现验证码发送 以及限制每日发送次数
Apr 18 Redis
Redis实现订单过期删除的方法步骤
Jun 05 Redis
Redis实现主从复制方式(Master&Slave)
Jun 21 Redis
redis限流的实际应用
Apr 24 #Redis
Redis安装启动及常见数据类型
redis配置文件中常用配置详解
Apr 14 #Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
浅谈redis五大数据结构和使用场景
Redis如何一键部署脚本
redis连接被拒绝的解决方案
You might like
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
聊天室php&mysql(一)
2006/10/09 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
Js nodeType 属性全面解析
2013/11/14 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python 文件和输入输出小结
2013/10/09 Python
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
24式加速你的Python(小结)
2019/06/13 Python
使用python制作一个解压缩软件
2019/11/13 Python
python3 求约数的实例
2019/12/05 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
老同学聚会感言
2014/02/23 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
房地产项目合作意向书
2015/05/08 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
辩论会主持词
2015/07/03 职场文书
详解Python描述符的工作原理
2021/06/11 Python