在nestjs中使用redis检测在线用户人数

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 检测在线用户人数,是开发中经常遇到的需求,接下来简单了解一下如何在Nestjs中使用redis 统计在线用户人数。

安装依赖:
首先,安装 @nestjs/redis 包,以及 Redis 客户端 ioredis。

npm install --save @nestjs/redis ioredis

配置 Redis 模块:
在你的 NestJS 应用的根模块(通常是 app.module.ts)中导入 RedisModule,并在 imports 数组中添加它。

import {
    Module } from '@nestjs/common';
import {
    RedisModule } from '@nestjs/redis';

@Module({
   
  imports: [
    RedisModule.register({
   
      url: 'redis://localhost:6379', // 根据实际情况填写Redis连接URL
    }),
  ],
})
export class AppModule {
   }

创建在线用户服务:
创建一个名为 OnlineUsersService 的服务,该服务将使用 Redis 来跟踪在线用户。

import {
    Injectable, Inject } from '@nestjs/common';
import {
    Redis } from 'ioredis';

@Injectable()
export class OnlineUsersService {
   
  constructor(@Inject('REDIS_CLIENT') private readonly redisClient: Redis) {
   }

  async addUser(userId: string) {
   
    await this.redisClient.incr(`online-user:${
     userId}`);
  }

  async removeUser(userId: string) {
   
    const count = await this.redisClient.decr(`online-user:${
     userId}`);
    if (count <= 0) {
   
      await this.redisClient.del(`online-user:${
     userId}`);
    }
  }

  async getOnlineUserCount(): Promise<number> {
   
    const keys = await this.redisClient.keys('online-user:*');
    return keys.length;
  }
}

注册 Redis 提供者:
在根模块中将 Redis 客户端注入到应用程序中,以便在服务中使用。

import {
    Module } from '@nestjs/common';
import {
    RedisModule } from 'nestjs-redis';
import {
    OnlineUsersService } from './online-users.service';

@Module({
   
  imports: [
    RedisModule.forRootAsync({
   
      useFactory: () => ({
   
        url: 'redis://localhost:6379', // 根据实际情况填写Redis连接URL
      }),
    }),
  ],
  providers: [OnlineUsersService],
})
export class AppModule {
   }


使用在线用户服务:
在需要跟踪在线用户人数的地方(如控制器或其他服务),将 OnlineUsersService 作为依赖注入,并调用其中的方法来添加、移除用户,并获取在线用户人数。

import {
    Controller, Get, Inject } from '@nestjs/common';
import {
    OnlineUsersService } from './online-users.service';

@Controller('users')
export class UsersController {
   
  constructor(private readonly onlineUsersService: OnlineUsersService) {
   }

  @Get()
  async getCurrentOnlineUsers(): Promise<number> {
   
    const count = await this.onlineUsersService.getOnlineUserCount();
    return count;
  }
}

如上述代码所示,我们创建了一个 OnlineUsersService 服务,使用 Redis 进行在线用户跟踪。通过调用 addUser() 和 removeUser() 方法来添加和移除用户,使用 getOnlineUserCount() 方法获取在线用户人数。在控制器中,我们使用 OnlineUsersService 来获取当前在线用户人数。

请注意,上述代码仅作为示例和学习,你需要根据实际情况进行适当的调整和错误处理。确保配置正确的 Redis 连接URL,并根据你的应用需求进行更多的功能扩展和优化。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
NoSQL Java Redis
redis: jedis连接超时(需要手动注入连接超时检测的配置)
redis: jedis连接超时(需要手动注入连接超时检测的配置)
521 0
|
19天前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
47 5
|
1月前
|
安全 NoSQL 网络安全
漏洞检测与防御:Redis未授权访问漏洞复现
漏洞检测与防御:Redis未授权访问漏洞复现
|
6月前
|
NoSQL Redis
透视Redis集群:心跳检测如何维护高可用性
Redis心跳检测保障集群可靠性,通过PING命令检测主从连接状态,预防数据丢失。当连接异常时,自动触发主从切换。此外,心跳检测辅助实现`min-slaves-to-write`和`min-slaves-max-lag`策略,避免不安全写操作。还有重传机制,确保命令无丢失,维持数据一致性。合理配置心跳检测,能有效防止数据问题,提升Redis集群的高可用性。关注“软件求生”获取更多Redis知识!
452 10
透视Redis集群:心跳检测如何维护高可用性
|
6月前
|
存储 监控 NoSQL
|
XML NoSQL Redis
如何检测出redis的哪些key在消耗内存
如何检测出redis的哪些key在消耗内存
89 0
|
NoSQL Java Scala
Scala/Java - Redis 连接检测与重试
项目实现中需要连接 redis,为了防止因网络抖动或其他原因造成的客户端连接失败,一般需要增加重试机制判断 client 是否连接成功,之前写了一版重连代码发现有 bug,借此机会看下代码 bug 以及如何更好的重连 redis。...
374 0
Scala/Java - Redis 连接检测与重试
|
存储 NoSQL 安全
【Redis】位图以及位图的使用场景(统计在线人数和用户在线状态)
【Redis】位图以及位图的使用场景(统计在线人数和用户在线状态)
【Redis】位图以及位图的使用场景(统计在线人数和用户在线状态)
|
Prometheus 监控 NoSQL
命令行搞一切之如何使用命令行为 redis 做健康检测
如何使用命令行检查 redis 是否按预期工作
878 0
|
存储 NoSQL Java
云栖社区Redis&MongoDB大群建立了,究竟什么操作让钉群刚一建立人数就达600+ ?
欢迎大家加入Redis&MongoDB 社区大群! 为满足广大开发者对更多数据库产品的学习需求,我们特别新建了Redis&MongoDB社区交流群,邀请多位阿里数据库专家入驻,为广大云用户提供专业的技术分享及回答,定期在国内开展线下技术沙龙,专家技术直播,欢迎大家加入!
2375 0