secra-cache 0.1.2

一个基于 Redis 的统一缓存管理库,专为插件化架构设计,提供强隔离、生命周期管理和极简 API
# 依赖分析报告

## 概述

本项目是一个基于 Redis 的缓存管理库,为插件系统提供统一的缓存管理功能。以下是所有依赖的详细分析。

## 核心依赖列表

### 1. **async-trait** (0.1)
**用途**: 支持异步 trait 定义

**使用位置**:
- `src/traits.rs`: 定义 `Cache` trait,所有方法都是异步的
- `src/plugin.rs`: 实现 `Cache` trait

**必要性**: ⭐⭐⭐⭐⭐ 必需 - Rust 原生不支持异步 trait,必须使用此库

---

### 2. **redis** (0.25)
**用途**: Redis 客户端库,提供异步 Redis 操作

**使用位置**:
- `src/manager.rs`: 
  - `Client` - 创建 Redis 客户端
  - `MultiplexedConnection` - 多路复用连接
- `src/plugin.rs`:
  - `AsyncCommands` - 异步命令接口
  - `redis::cmd()` - 执行 Redis 命令(SET, EXPIRE, TTL, SCAN, DEL)

**特性启用**:
- `tokio-comp`: Tokio 异步运行时支持
- `connection-manager`: 连接管理功能

**必要性**: ⭐⭐⭐⭐⭐ 必需 - 核心功能依赖

---

### 3. **serde** (1.0) + **serde_json** (1.0)
**用途**: 序列化/反序列化支持

**使用位置**:
- `src/traits.rs`: 
  - `Serialize` - 序列化 trait
  - `DeserializeOwned` - 反序列化 trait
- `src/plugin.rs`:
  - `serde_json::to_string()` - 序列化为 JSON 字符串
  - `serde_json::from_str()` - 从 JSON 字符串反序列化

**特性启用**:
- `derive`: 支持 `#[derive(Serialize, Deserialize)]`

**必要性**: ⭐⭐⭐⭐⭐ 必需 - 缓存值需要序列化存储

---

### 4. **dashmap** (5.5)
**用途**: 高性能并发 HashMap

**使用位置**:
- `src/manager.rs`: 
  - `DashMap<String, HashSet<String>>` - 存储插件 Key 索引
  - 用于快速查找和删除插件的所有 Key

**优势**: 
- 无需显式加锁,提高并发性能
- 替代 `RwLock<HashMap>` 的性能优化方案

**必要性**: ⭐⭐⭐⭐ 重要 - 性能优化依赖,可用 `RwLock<HashMap>` 替代但性能较差

---

### 5. **tokio** (1.0)
**用途**: 异步运行时

**使用位置**:
- `src/manager.rs`:
  - `tokio::sync::RwLock` - 异步读写锁,保护 Redis 连接

**特性启用**:
- `sync`: 同步原语(RwLock, Mutex 等)
- `rt`: 运行时支持

**必要性**: ⭐⭐⭐⭐⭐ 必需 - 异步运行时,所有异步操作都依赖它

---

### 6. **rand** (0.8)
**用途**: 随机数生成

**使用位置**:
- `src/manager.rs`:
  - `resolve_ttl()` 方法中用于 TTL 随机化
  - 防止缓存雪崩:在 `default_ttl ± random_range` 范围内随机

**使用示例**:
```rust
let mut rng = rand::rng();
let random_offset = rng.random_range(0..range.as_secs());
```

**必要性**: ⭐⭐⭐ 可选 - 用于缓存雪崩防护,可以移除但会失去此功能

---

### 7. **tracing** (0.1)
**用途**: 结构化日志记录

**使用位置**:
- `src/manager.rs`:
  - `tracing::info!()` - 记录插件缓存清理操作日志

**日志场景**:
- 插件缓存清理
- 插件升级时的缓存清理
- 插件禁用时的缓存清理
- 模块缓存清理

**必要性**: ⭐⭐⭐ 可选 - 用于日志记录,可以移除或替换为其他日志库

---

### 8. **thiserror** (1.0)
**用途**: 错误类型定义

**使用位置**:
- `src/error.rs`:
  - `#[derive(Error)]` - 自动实现 `std::error::Error` trait
  - 定义 `CacheError` 枚举类型

**错误类型**:
- `ConnectionFailed` - Redis 连接失败
- `OperationFailed` - 缓存操作失败
- `SerializationFailed` - 序列化失败
- `DeserializationFailed` - 反序列化失败
- `PermissionDenied` - 权限不足
- `InvalidKey` - 无效的 Key
- `QuotaExceeded` - 配额超限

**必要性**: ⭐⭐⭐⭐ 重要 - 简化错误处理,可用手动实现替代但代码更冗长

---

## 依赖关系图

```
secra-cache
├── async-trait (异步 trait 支持)
├── redis (Redis 客户端)
│   └── tokio (异步运行时)
├── serde + serde_json (序列化)
├── dashmap (并发数据结构)
├── tokio (异步运行时)
├── rand (随机数生成)
├── tracing (日志)
└── thiserror (错误处理)
```

## 版本选择说明

### 为什么选择这些版本?

1. **async-trait 0.1**: 稳定版本,广泛使用
2. **redis 0.25**: 最新稳定版本,支持 Tokio 和连接管理
3. **serde 1.0**: 稳定版本,生态系统标准
4. **dashmap 5.5**: 最新稳定版本,性能优秀
5. **tokio 1.0**: 稳定版本,异步运行时标准
6. **rand 0.8**: 稳定版本,功能完整
7. **tracing 0.1**: 结构化日志标准库
8. **thiserror 1.0**: 稳定版本,错误处理最佳实践

## 可选依赖建议

如果未来需要扩展功能,可以考虑添加:

- **futures**: 如果需要在 trait 中使用更多 Future 组合子
- **uuid**: 如果需要生成唯一 ID
- **chrono**: 如果需要更复杂的时间处理
- **bytes**: 如果需要高效的字节操作

## 安装依赖

运行以下命令安装所有依赖:

```bash
cargo build
```

或者仅下载依赖(不编译):

```bash
cargo fetch
```

## 依赖大小估算

- **编译后大小**: 约 2-5 MB(取决于优化级别)
- **依赖数量**: 8 个直接依赖,约 50-100 个传递依赖
- **编译时间**: 首次编译约 1-3 分钟(取决于机器性能)

## 注意事项

1. **edition**: 已从 "2024" 更正为 "2021"(Rust 当前最新稳定版)
2. **特性标志**: Redis 需要启用 `tokio-comp``connection-manager` 特性
3. **异步运行时**: 确保使用 Tokio 作为异步运行时(其他运行时可能需要调整)