Day19-离线缓存架构图 + 实际场景总结
一、iOS 离线缓存架构图(逻辑层级)
1 | ┌────────────────────────────┐ |
二、核心模块说明
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、定期清理、不常访问淘汰 |
加密与隐私 | 对本地缓存内容加密,避免隐私泄露 |