安装依赖:
首先,安装 @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,并根据你的应用需求进行更多的功能扩展和优化。