Day19-离线缓存架构图 + 实际场景总结

YVTU

一、iOS 离线缓存架构图(逻辑层级)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌────────────────────────────┐
│ 用户操作层 │
├────────────────────────────┤
│ ViewController / ViewModel │
├─────────────┬──────────────┤
│ 请求数据接口(Manager) │
├─────────────┴──────────────┤
│ 离线缓存协调模块 │ ◄─ 控制数据来源逻辑
│ (CacheMediator/CacheLogic)│
├──────┬────────────┬────────┤
│ 网络模块 │ 本地缓存模块 │ 数据同步模块 │
│ (NSURLSession/AFN等) │ (SQLite/Realm/File) │ (版本/时间戳/校验) │
├──────┴────────────┴────────┤
│ 数据存储层(DataLayer) │
│ 本地数据库 / 文件系统等 │
└────────────────────────────┘

二、核心模块说明

1. 网络模块

  • 使用 NSURLSession / AFNetworking / Alamofire 发起请求。
  • 支持断点续传、etag、Last-Modified 等缓存策略。

2. 缓存协调模块(CacheMediator)

  • 判定是否命中本地缓存,是否需要刷新。
  • 负责缓存策略(如:缓存有效期、本地优先、弱网兜底、预加载)。

3. 本地缓存模块

  • 数据结构:
    • JSON:保存到数据库(SQLite/Realm/CoreData)
    • 图片、音视频:文件系统(Disk)
  • 元信息同步:缓存时间、etag、url、数据版本。

4. 数据同步模块

  • 判断缓存是否过期、是否需更新。
  • 后台更新机制(App 启动、进入后台、拉取刷新)。

三、典型使用场景总结

场景 离线缓存设计方案
新闻资讯App 首页数据列表 JSON 缓存,图片预加载;弱网下优先读本地。
视频播放器 播放器支持 m3u8 / mp4 文件预缓存,支持断点续传。
电商应用 商品列表缓存、详情页缓存,支持数据版本控制。
聊天/IM应用 消息本地数据库持久化(例如 SQLite),断网时仍可查看。
地图/导航类 地图瓦片离线下载,路径规划缓存;GPS不依赖网络。
表单提交类(问卷/CRM) 数据草稿保存到本地,网络恢复后自动同步。

四、最佳实践与注意事项

实践建议 说明
数据版本控制 使用版本号或时间戳判断缓存是否过期
多级缓存策略(Memory + Disk) 提高访问速度并节省网络资源
异常处理兜底(如网络失败) 本地缓存兜底,保证 App 不崩溃、可用
缓存清理策略 LRU、定期清理、不常访问淘汰
加密与隐私 对本地缓存内容加密,避免隐私泄露