Appearance
database-cache-simulation
1. 实验目标
用纯 Java CLI 仿真移动端数据库与缓存机制(对应 docs/06-backend-data/02):
- SQLite WAL 模式:写入追加进
-wal日志,读直接读原库 → 读不阻塞写、写不阻塞读 - 多级缓存分层:内存 → 磁盘(SQLite) → 远端(API),命中率优先内存
- 对照:传统模式写锁整库 → 读写互斥、并发低
2. 工程要点
write()模拟 WAL 语义(顺序追加,无锁);read()直接读原库layeredGet实现三级缓存:内存命中即返 → 磁盘命中提升内存 → 远端回源并双写remoteHits计数器量化"回源次数",直观展示分层缓存效果
3. 运行方式
bash
cd labs/java/backend-data/database-cache-simulation
javac -d out src/DatabaseCacheSimulation.java
java -cp out DatabaseCacheSimulation4. 预期现象
- WAL 写入不阻塞读(写进日志立即返回)
- 5 次读同一 key →
远端回源次数 = 1(首次回源后内存/磁盘命中)
5. 常见误区
| 误区 | 实际情况 |
|---|---|
| SQLite 性能差所以不用 | 开 WAL + 事务后读写并发大幅提升,移动端本地数据首选 |
| 缓存只用内存就够了 | 内存易失且有限;磁盘(SQLite)是持久层,远端是兜底,三级配合 |
| 写缓存比删缓存好 | 移动端场景同样遵循 Cache-Aside:更新时失效缓存,读时回源重建 |
6. 对应知识库文档
- 理论主文档:移动端与服务端数据库、Redis 缓存体系总览
- 缓存策略延伸:缓存更新策略与常见坑:穿透、击穿、雪崩与一致性