/** * Redis模块配置 * * 功能描述: * - 根据环境变量自动选择Redis实现方式 * - 开发环境使用文件存储模拟Redis功能 * - 生产环境连接真实Redis服务器 * - 提供统一的Redis服务注入接口 * * 职责分离: * - 服务工厂:根据配置创建合适的Redis服务实例 * - 依赖注入:为其他模块提供REDIS_SERVICE令牌 * - 环境适配:自动适配不同环境的Redis需求 * * 最近修改: * - 2025-01-07: 代码规范优化 - 更新导入路径,修正文件重命名后的引用关系 * - 2025-01-07: 代码规范优化 - 完善文件头注释和类注释,添加详细功能说明 * * @author moyin * @version 1.0.2 * @since 2025-01-07 * @lastModified 2025-01-07 */ import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { FileRedisService } from './file_redis.service'; import { RealRedisService } from './real_redis.service'; import { IRedisService } from './redis.interface'; /** * Redis模块 * * 职责: * - 根据环境变量自动选择文件存储或真实Redis服务 * - 提供统一的Redis服务注入接口 * - 管理Redis服务的生命周期 * * 主要方法: * - useFactory() - 根据配置创建Redis服务实例 * * 使用场景: * - 在需要Redis功能的模块中导入此模块 * - 通过@Inject('REDIS_SERVICE')注入Redis服务 */ @Module({ imports: [ConfigModule], providers: [ { provide: 'REDIS_SERVICE', useFactory: (configService: ConfigService): IRedisService => { const useFileRedis = configService.get('USE_FILE_REDIS', 'true') === 'true'; const nodeEnv = configService.get('NODE_ENV', 'development'); // 在开发环境或明确配置使用文件Redis时,使用文件存储 if (nodeEnv === 'development' || useFileRedis) { return new FileRedisService(); } else { return new RealRedisService(configService); } }, inject: [ConfigService], }, FileRedisService, RealRedisService, ], exports: ['REDIS_SERVICE'], }) export class RedisModule {}