浅谈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方式
May 07 Redis
基于Redis过期事件实现订单超时取消
May 08 Redis
基于Redis实现分布式锁的方法(lua脚本版)
May 12 Redis
详解Redis主从复制实践
May 19 Redis
浅析Redis Sentinel 与 Redis Cluster
Jun 24 Redis
Redis如何实现分布式锁
Aug 23 Redis
Window server中安装Redis的超详细教程
Nov 17 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
Grafana可视化监控系统结合SpringBoot使用
Apr 19 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 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php计算一个文件大小的方法
2015/03/30 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
(function($){...})(jQuery)的意思
2010/07/22 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
vue中监听返回键问题
2019/08/28 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
老生常谈进程线程协程那些事儿
2017/07/24 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
优秀团员自我评价范文
2014/04/23 职场文书
关于环保的建议书
2014/05/12 职场文书
答谢会策划方案
2014/05/12 职场文书
孝女彩金观后感
2015/06/10 职场文书
单位工资证明范本
2015/06/12 职场文书
工程款催款函
2015/06/24 职场文书
springboot中一些比较常用的注解总结
2021/06/11 Java/Android