# Redis Redis缓存服务模块

Redis 是应用的核心缓存服务模块，提供完整的Redis操作功能，支持开发环境的文件存储模拟和生产环境的真实Redis服务器连接，具备统一的接口规范、自动环境切换、完整的过期机制和错误处理能力。

## 基础键值操作

### set()
设置键值对，支持可选的过期时间参数。

### get()
获取键对应的值，不存在或已过期时返回null。

### del()
删除指定的键，返回删除操作是否成功。

### exists()
检查键是否存在且未过期。

## 过期时间管理

### setex()
设置键值对并同时指定过期时间。

### expire()
为现有键设置过期时间。

### ttl()
获取键的剩余过期时间，支持状态码返回。

## 数值操作

### incr()
键值自增操作，返回自增后的新值。

## 集合操作

### sadd()
向集合添加成员。

### srem()
从集合移除成员。

### smembers()
获取集合的所有成员列表。

## 系统操作

### flushall()
清空所有数据。

## 使用的项目内部依赖

### Injectable (来自 @nestjs/common)
NestJS依赖注入装饰器，用于标记服务类可被注入。

### Logger (来自 @nestjs/common)
NestJS日志服务，用于记录操作日志和错误信息。

### OnModuleDestroy (来自 @nestjs/common)
NestJS生命周期接口，用于模块销毁时的资源清理。

### ConfigService (来自 @nestjs/config)
NestJS配置服务，用于读取环境变量和应用配置。

### ConfigModule (来自 @nestjs/config)
NestJS配置模块，提供配置服务的依赖注入支持。

### Redis (来自 ioredis)
Redis客户端库，提供与Redis服务器的连接和操作功能。

### fs.promises (来自 Node.js)
Node.js异步文件系统API，用于文件模式的数据持久化。

### path (来自 Node.js)
Node.js路径处理工具，用于构建文件存储路径。

### IRedisService (本模块)
Redis服务接口定义，规范所有Redis操作方法的签名和行为。

### FileRedisService (本模块)
文件系统模拟Redis服务的实现类，适用于开发测试环境。

### RealRedisService (本模块)
真实Redis服务器连接的实现类，适用于生产环境。

## 核心特性

### 双模式支持
- 开发模式：使用FileRedisService进行文件存储模拟，无需外部Redis服务器
- 生产模式：使用RealRedisService连接真实Redis服务器，提供高性能缓存
- 自动切换：根据NODE_ENV和USE_FILE_REDIS环境变量自动选择合适的实现

### 完整的Redis功能
- 基础操作：支持set、get、del、exists等核心键值操作
- 过期机制：完整的TTL支持，包括设置、查询和自动清理功能
- 集合操作：支持sadd、srem、smembers等集合管理功能
- 数值操作：支持incr自增操作，适用于计数器场景

### 数据持久化保障
- 文件模式：使用JSON文件持久化数据，支持应用重启后数据恢复
- 真实模式：依托Redis服务器的RDB和AOF持久化机制
- 过期清理：文件模式提供定时过期键清理机制，每分钟自动清理

### 错误处理和监控
- 连接监控：Redis连接状态监控，支持连接、错误、关闭事件处理
- 异常处理：完整的错误捕获和日志记录，确保服务稳定性
- 操作日志：详细的操作日志记录，便于调试和性能监控
- 自动重连：Redis连接异常时支持自动重连机制

## 潜在风险

### 文件模式性能限制
- 文件模式在高并发场景下性能有限，每次操作都需要文件I/O
- 不适用于生产环境的高性能需求
- 建议仅在开发测试环境使用，生产环境切换到真实Redis模式

### 数据一致性风险
- 文件模式的过期清理是定时执行（每分钟一次），可能存在短暂的过期数据访问
- 应用异常退出时可能导致内存数据与文件数据不一致
- 建议在生产环境使用真实Redis服务，依托其原子操作保证一致性

### 环境配置依赖
- 真实Redis模式依赖外部Redis服务器的可用性和网络连接稳定性
- Redis服务器故障或网络异常可能导致缓存服务不可用
- 建议配置Redis集群、主从复制和监控告警机制

### 内存使用风险
- 文件模式将所有数据加载到内存Map中，大量数据可能导致内存溢出
- 缺少内存使用限制和LRU淘汰机制
- 建议控制缓存数据量，或在生产环境使用真实Redis的内存管理功能

---

**版本信息**
- 模块版本：1.0.3
- 创建日期：2025-01-07
- 最后修改：2026-01-07
- 作者：moyin