浅谈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 20 Redis
浅谈Redis的几个过期策略
May 27 Redis
压缩Redis里的字符串大对象操作
Jun 23 Redis
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
Feb 12 Redis
解决redis批量删除key值的问题
Mar 23 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
Apr 03 Redis
Redis实战高并发之扣减库存项目
Apr 14 Redis
Redis 异步机制
May 15 Redis
Redis基本数据类型List常用操作命令
Jun 01 Redis
Redis实现分布式锁的五种方法详解
Jun 14 Redis
使用Redis实现分布式锁的方法
Jun 16 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高级OOP技术演示
2009/08/27 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
详解vue-cli3使用
2018/08/14 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
Python的类实例属性访问规则探讨
2015/01/30 Python
Python3生成手写体数字方法
2018/01/30 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
自荐信模版
2013/10/24 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
老干部工作汇报材料
2014/10/28 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
高三语文教学反思
2016/02/16 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
python基础详解之if循环语句
2021/04/24 Python
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL