首页 > 数据库 >使用Redis来实现在线人数的查看

使用Redis来实现在线人数的查看

时间:2024-11-22 22:40:41浏览次数:1  
标签:视频 在线 查看 Redis key 人数 fileId

使用Redis来实现在线人数的查看

在学习程序员老罗的easylive项目当中,遇到了一个对我现阶段来说很有意思的功能,那就是实现在线人数查看的功能,我第一次接触到这个功能是在学习WebServlet的监听器的时候.那时候是使用Listener监听器的Session事件和Context的生命周期来实现这个功能?具体的有点忘记了反正思路就是这样,在这个项目当中又遇到了这个功能.

业务实现环境
  1. Redis 7.4.0 重要()
  2. JAVA 8
  3. SpringBoot 2

1. 功能运用场景


因为easyLive项目是仿B站的一个项目,所以视频播放界面就会有一个显示几人正在观看的数据
image

2. 实现方法


  • 使用netty
    在视频里一开始提到可以使用websocket来查看有多少用户连接到服务器(websocket网络编程之前学过一点,但是并没有实战用过,所以只知道思路忘记了具体怎么操作)
  • 使用Redis缓存 (实现)
    这里的思路是前端利用心跳机制,每隔一段事件发送心跳包来更新确认用户的状态,这里包含了用户的deviceId和VideoId
    不选用netty是因为整个项目目前为止就这里使用了感觉没必要所以就不用了(其实我感觉私信方面也可以用,视频没看完,倒时候再观察)

3. 实现过程


接下来开始实现这个功能

1. 增加在线人数

首先在对应的控制器里新建一个控制器方法
image
这里返回的i就是在线人数了,进入这个方法
image
这里就是实现代码了
首先设置Redis里的key的k值,这里分为两个,一个是playOnlineCountKey,这里是视频文件当前的观看人数(因为B站不是算当前视频而是算视频文件的,这里存在分P)
image
userPlayOnlineKey则是记录当前视频文件下有几个用户在观看(就是通过这个key来检测用户是否有在看视频从而对上面的playOnlineCountKey来进行增减)
image
这里判断一下这个key是否存在,如果当前当前fileId下的deviceId这个key不存在的话则创建这个key并且设置过期时间为8s(K为deviceId,V为视频文件ID)
然后再给上面playOnlineCountKey的key值自增1,这里如果key不存在的话Redis会初始化一个K为fileID的key,然后V初始化为0,这里自增之后则是1,再使用intvalue()方法返回v值
image
如果存在则是将过期时间重置
之后返回playOnlineCountKey的值,这里如果发生阻塞之类的话可能会导致返回的时候这个key已经消失了这是Integer为null,而这个接口都是在观看视频的时候调用,所以当为null的时候直接返回1
image

2. 减少在线人数

当用户离开了视频的播放界面,此时前端就不会向后端发送带有当前fileId和deviceId的请求了,所以就不会更新队友的key,当key过期之后,就要减少当前视频的在线观看人数(因为还有其他用户在观看此视频,所以视频播放人数的key是当前视频完全没人观看的时候才消失)
要实现这个功能,那我们就要监听到key过期消失这个事件,我们新建一个类作为Redis的监听器Component
image
这个类集成了KeyExpirationEventMessageListener类
image
通过名字我们可以看出来,这个类就是监听key过期事件消息的一个监听器(感兴趣可以去了解一下Redis的事件机制)
这里先将redis的message类给转化为String
image
这里通过监听事件监听到message,消息体是过期key的名称也就是K值,此时将message转化为字符串类型,得到过期key的K值,通过比对在线人数业务的前缀来判断是否是实现减少在线数量的key.
当前缀满足要求时,将前缀去掉,取出fileId:deviceId的这个key
随后通过这个路径截取出fileId(fileId设计成了20个字符长度)
获取到fileId之后再减少指定fileId的playOnlineCountKey的值,自减1.

4.总结

使用Redis和心跳机制来实现了在线人数的变化查询,其实还有redis消息队列的,接下来会学到,之后再结合自己练习试试看使用kafka来代替消息队列.

标签:视频,在线,查看,Redis,key,人数,fileId
From: https://www.cnblogs.com/MingHaiZ/p/18563822

相关文章

  • 【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题
    问题描述部署在AKS中的应用,连接Redis高频率出现timeout问题 问题解答查看Redis状态,没有任何异常,服务没有更新,ServiceLoad,CPU,Memory,Connect等指标均正常。在排除Redis端问题后,转向了AKS中。开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS......
  • 3-测试go-redis+redsync实现分布式锁 --开源项目obtain_data测试
    3-测试go-redis+redsync实现分布式锁1.go-redis+redsync实现分布式锁测试效果a.测试页面测试页面:--这里使用Postman来做测试http://127.0.0.1:8000/goods/lockbuyoneb.测试效果查看终端: --使用ab软件并发100个请求请求:$ab-c100-n100http://127.0.0.1:8000......
  • Spring Boot 和 Spring Cloud 构建一个完整的微服务架构——在线购物系统
    接上一篇博客,大家可以结合一起看看实例理解https://blog.csdn.net/speaking_me/article/details/143917383?spm=1001.2014.3001.5502构建一个综合性的大型微服务项目可以帮助开发者更全面地理解和掌握SpringBoot和SpringCloud的应用。接下来,我将通过一个具体的例子——......
  • Redis的特性&&ubuntu进行安装
    文章目录1.六大特性1.1内存存储数据1.2可编程1.3可扩展1.4持久化1.5集群1.6高可用1.7速度快2.具体应用场景(了解)3.Ubuntu安装Redis3.1安装指令3.2查看状态3.3查找配置文件3.4修改文件内容3.5重启服务器生效3.6安装客户端并进行检查4.Redis客户端介绍1.六大特性redis......
  • 修改网站登录在线时间,网站会话超时设置
    修改网站的登录在线时间(会话超时时间)可以通过以下步骤完成:编辑配置文件:找到网站的配置文件,通常是 config.php 或 settings.php。打开文件,找到会话超时时间的设置。修改超时时间:根据使用的框架或CMS,修改相应的配置项。例如,在PHP中,可以设置 session.gc_maxlifetime......
  • flask框架动物在线领养网站(毕设源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于动物在线领养网站的研究,现有研究多侧重于线下领养流程或单独的动物救援方面,专门针对动物在线领养网站全方位功能与运营模式的研究......
  • Linux-Cent7.9 redis路径查找 | 删除redis所有缓存
    查看redis端口命令[root@VM-20-17-centosetc]#ps-ef|grepredisredis125710Nov20?00:02:06/usr/bin/redis-server0.0.0.0:6379root63406653015:27pts/000:00:00grep--color=autoredis发现redis-server对应端口为1257查看r......
  • 国内外优秀的视频提取音频在线工具分享
    在数字时代,音频和视频的处理变得越来越频繁和重要。有时,我们可能只需要视频中的音频部分,而不需要视频内容。为了满足这一需求,各种视频提取音频的工具应运而生。本文将介绍一些国内外优秀的视频提取音频在线工具。国内在线工具推荐:易我人声分离易我人声分离是一款功能强大的......
  • 基于Springboot+Vue的在线考试系统 (含源码数据库)
    1.开发环境开发系统:Windows10/11架构模式:MVC/前后端分离JDK版本:JavaJDK1.8开发工具:IDEA数据库版本:mysql5.7或8.0数据库可视化工具:navicat服务器:SpringBoot自带apachetomcat主要技术:Java,Springboot,mybatis,mysql,vue2.视频演示地址3.功能该系统......
  • 使用原生Web开发技术为在线客服系统提供网页版配置工具
    升讯威在线客服与营销系统是基于.netcore/WPF开发的一款在线客服软件,宗旨是:开放、开源、共享。努力打造.net社区的一款优秀开源产品。背景随着下载私有化部署的用户越来越多,部署配置时的便利性到了需要进一步提升的时候。部署时需要修改一些配置文件,除了直接手工修改外......