浅谈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 12 Redis
Redis遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 Redis
深入浅析Redis 集群伸缩原理
May 15 Redis
浅谈Redis主从复制以及主从复制原理
May 29 Redis
redis中lua脚本使用教程
Nov 01 Redis
Redis中缓存穿透/击穿/雪崩问题和解决方法
Dec 04 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
Redis命令处理过程源码解析
Feb 12 Redis
Redis入门基础常用操作命令整理
Jun 01 Redis
Redis实现分布式锁的五种方法详解
Jun 14 Redis
浅谈Redis变慢的原因及排查方法
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
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
详解Python发送邮件实例
2016/01/10 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python配置文件写入过程详解
2019/10/19 Python
python中安装django模块的方法
2020/03/12 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
英国网上花店:Bunches
2016/11/29 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
医院总经理岗位职责
2014/02/04 职场文书
2014年项目工作总结
2014/11/24 职场文书
幼儿教师个人总结
2015/02/05 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
技术转让协议书
2016/03/19 职场文书
纪念建国70周年演讲稿
2019/07/19 职场文书