浅谈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 相关文章推荐
Redis5之后版本的高可用集群搭建的实现
Apr 27 Redis
Redis Cluster 字段模糊匹配及删除
May 27 Redis
厉害!这是Redis可视化工具最全的横向评测
Jul 15 Redis
Redis Cluster集群动态扩容的实现
Jul 15 Redis
使用redis生成唯一编号及原理示例详解
Sep 15 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
浅谈Redis的keys命令到底有多慢
Oct 05 Redis
Redis模仿手机验证码发送的实现示例
Nov 02 Redis
Redis数据同步之redis shake的实现方法
Apr 21 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 Redis
Redis基本数据类型Zset有序集合常用操作
Jun 01 Redis
浅谈Redis缓冲区机制
Jun 05 Redis
redis限流的实际应用
Apr 24 #Redis
Redis安装启动及常见数据类型
redis配置文件中常用配置详解
Apr 14 #Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 #Redis
浅谈redis五大数据结构和使用场景
Redis如何一键部署脚本
redis连接被拒绝的解决方案
You might like
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
python打开使用的方法
2019/09/30 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
酒店应聘自荐信
2013/11/09 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
2015年超市工作总结
2015/04/09 职场文书
设备技术员岗位职责
2015/04/11 职场文书
法律意见书范本
2015/06/04 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技
SpringBoot详解执行过程
2022/07/15 Java/Android