## 缓存系统性能对比分析
### 1. CAPEX 约束测试(内存受限环境)
| **执行时间 (ms)** | 6.59 | 64.81 | 15.96 |
| **真实命中率** | 85.92% | 87.73% | 87.48% |
| **净内存占用 (KB)** | 1328.00 | 1040.00 | 704.00 |
| **每项平均成本 (Bytes)** | 679.94 | 532.48 | 360.45 |
**分析:**
- **TinyUFO** 内存效率最高,每项仅需 328 字节(比 Moka 低 38%,比 DualCacheFF 低 55%)
- **Moka** 命中率略优(+2.07pp),但执行时间慢 6 倍,不适合延迟敏感场景
- **DualCacheFF** 在速度与命中率之间取得较好平衡
---
### 2. 延迟分布(Zipf 工作负载,2M 操作)
| **命中率** | 79.03% | 79.13% | 78.56% |
| **P50 延迟** | 42 ns | 583 ns | 166 ns |
| **P90 延迟** | 125 ns | 2042 ns | 1042 ns |
| **P99 延迟** | 291 ns | 10250 ns | 3375 ns |
| **P99.9 延迟** | 750 ns | 234834 ns | 14125 ns |
| **P99.99 延迟** | 2208 ns | 1043292 ns | 128166 ns |
| **最大延迟** | 3.91 ms | 3.90 ms | 13.72 ms |
**分析:**
- **DualCacheFF** 延迟全面最优:P99 仅 291ns,比 TinyUFO 快 11.6 倍,比 Moka 快 35 倍
- **Moka** 尾延迟极高(P99.9 达 234μs),存在明显的 GC 或锁竞争问题
- **TinyUFO** 延迟居中,但最大延迟异常高(13.7ms),可能偶发长尾
---
### 3. 内存开销(1M 插入后)
| **初始化后 RSS** | 40.73 MB | 1.73 MB | 69.92 MB |
| **1M 插入后 RSS** | 65.23 MB | 238.31 MB | 208.66 MB |
| **每项开销** | 50.78 字节 | 232.27 字节 | 201.17 字节 |
**分析:**
- **DualCacheFF** 内存效率极高,每项仅 50.8 字节(比 Moka 低 78%)
- **Moka** 初始开销极小(1.73MB),但随条目增长膨胀严重
- **TinyUFO** 初始内存较大(69.9MB),可能预分配了内部结构
---
### 4. 吞吐量对比(ops/s)与命中率
#### 4.1 Uniform 工作负载(随机均匀访问)
| DualCacheFF | **31,169,953** | 10.18% | 44,912,207 |
| TinyUFO | 2,719,779 | 10.00% | 44,998,899 |
| Moka | 995,432 | 10.01% | 44,997,097 |
#### 4.2 Zipf 工作负载(热点倾斜)
| DualCacheFF | **47,657,976** | 82.76% | 8,620,502 |
| TinyUFO | 9,971,967 | 82.45% | 8,773,701 |
| Moka | 4,099,235 | 83.53% | 8,234,784 |
#### 4.3 Scan 工作负载(顺序扫描,低局部性)
| DualCacheFF | **90,216,908** | 4.63% | 47,684,830 |
| TinyUFO | 2,357,956 | 2.01% | 48,996,129 |
| Moka | 1,024,259 | 7.43% | 46,284,461 |
#### 4.4 Mixed 工作负载(混合模式)
| DualCacheFF | **72,627,408** | 20.33% | 39,834,174 |
| TinyUFO | 3,352,733 | 31.98% | 34,010,772 |
| Moka | 1,389,931 | 32.14% | 33,931,770 |
**吞吐量分析:**
- **DualCacheFF** 在所有工作负载下吞吐量均领先 7~88 倍,极适合高 QPS 场景
- **Moka** 吞吐量最低,Zipf 下仅 4M ops/s,不适合性能敏感业务
- **TinyUFO** 吞吐量中等,约为 DualCacheFF 的 10%~20%
**命中率分析:**
- 在 Zipf 下三者命中率接近(~82-83%),Moka 略优
- 在 Mixed 下 TinyUFO 和 Moka 命中率(~32%)明显高于 DualCacheFF(20%)
- Uniform/Scan 下所有命中率均低(因访问模式无热点)
---
## 综合结论与选型建议
| **极致吞吐量** | DualCacheFF | 47M~90M ops/s,领先 7~88 倍 |
| **最低延迟(P99)** | DualCacheFF | 291ns vs TinyUFO 3375ns vs Moka 10250ns |
| **最低内存占用(CAPEX)** | TinyUFO | 640KB 净占用,327 字节/项 |
| **最高命中率(Zipf)** | Moka | 87.73%(CAPEX 约束下) |
| **最佳每项内存效率** | DualCacheFF | 50.8 字节/项(1M 条目后) |
### 场景化建议
1. **高吞吐、低延迟核心业务(如广告召回、推荐排序)**
→ **DualCacheFF**:吞吐量领先 1~2 个数量级,P99 延迟 <300ns,是最佳选择。
2. **内存容量严格受限(如嵌入式、边缘节点)**
→ **TinyUFO**:CAPEX 约束下内存占用最小,同时保持不错的命中率和中等延迟。
3. **追求最高命中率、可接受较低吞吐**
→ **Moka**:在 Zipf 和 Mixed 模式下命中率略高,但吞吐量最低且尾延迟高(P99.9 达 234μs)。
4. **避免使用的场景**
- **Moka** 不适合高并发、低延迟要求的环境(吞吐 <10M ops/s,P99 抖动大)。
- **TinyUFO** 需注意最大延迟尖峰(13.7ms),不适合硬实时系统。
> **总体推荐**:除非内存极度受限,否则 **DualCacheFF** 是综合性能最优选择;若需节约内存,可选用 **TinyUFO** 并接受部分吞吐损失。