1. 离线缓存场景识别与系统边界

构建离线缓存系统的第一步是回答五个核心问题:缓存什么?离线多久?数据多重要?什么时候切换?谁在使用?这三个维度的答案直接决定了本地存储结构、数据一致性模型以及与远程服务的同步策略。本章从场景识别的边界出发,建立离线缓存的可度量框架。

1.1 系统边界定义

离线缓存系统的边界以“网络可用性”为分割线。在线一侧是远程服务(API、数据库、消息队列),离线一侧是本地存储与缓存引擎。边界上的关键动作是切换触发和数据同步。下图描述了核心边界要素与交互关系。

离线缓存场景识别与系统边界 远程服务 REST API 消息队列 数据库 离线缓存 本地数据库 文件缓存 内存缓存 网络切换决策 在线 → 离线 触发条件 网络超时 信号弱 手动切换 离线时长等级 边界定义:网络不可用时的 本地数据读写与同步策略

1.2 场景识别的四个关键维度

离线缓存的场景识别并不只是“有网/没网”的二元划分,需要从以下四个维度进行综合评估。每个维度都会影响后续的存储结构设计。

维度核心问题典型场景对系统的影响
缓存目标 缓存哪些数据? 用户资料、商品列表、地图瓦片、操作日志 决定本地存储格式与空间预算
离线时长等级 离线持续多久? 秒级(网络抖动)、分钟级(隧道)、小时级(航班)、天级(偏远地区) 决定缓存替换策略与持久化要求
数据一致性要求 离线数据能否过期? 强一致(交易)、最终一致(资讯)、只读快照(配置) 决定同步模型与冲突解决算法
网络切换触发条件 如何检测离线? 心跳超时、信号阈值、手动模式、系统广播 决定切换延迟与用户体验
[设计提示] 实际项目中,优先定义最低支持的离线时长和可接受的数据新鲜度。这两个约束会直接筛选出可用的本地数据库候选。

1.3 离线时长等级划分

将离线时长划分为四个等级,每个等级对应不同的本地存储策略和资源预算。等级越高,对存储空间和数据持久性的要求越严格。

  • 等级 L0(秒级):网络瞬间抖动,重试即恢复。使用内存缓存 + 本地容错队列即可,无持久化要求。
  • 等级 L1(分钟级):短暂失联(如电梯、隧道)。需要写入本地数据库,但缓存淘汰策略可以激进。
  • 等级 L2(小时级):长时间离线(如航班)。本地缓存需覆盖核心业务流程,并启用写日志机制。
  • 等级 L3(天级+):极端离线(如野外作业)。需要全量数据副本,存储空间按 MB/GB 规划,同步使用批次增量。

1.4 数据一致性模型选择

数据一致性要求决定了缓存数据的有效期与同步触发机制。下表归纳了三种常见模型及其适用边界。

一致性模型离线行为冲突处理适用场景
最终一致 离线可写,本地先应用 时间戳/版本号合并 资讯、社交动态、配置下发
弱一致 只读缓存,离线不可写 无需冲突处理 商品详情、只读报表
强一致(离线受限) 离线不可操作或采用锁机制 悲观锁或保留写日志 交易系统、库存扣减
[风险提示] 强一致要求与离线写操作存在天然矛盾。如果业务要求强一致且允许离线写,必须引入冲突检测与补偿事务,这将显著增加系统复杂度。

1.5 网络切换触发条件清单

系统必须明确定义从在线模式切换到离线模式的触发条件,以避免频繁震荡或切换延迟。以下是四种常见触发模式:

  1. 心跳超时:连续 N 次心跳失败(通常 3 次,超时 5s/次),判定为离线。
  2. 信号强度阈值:RSSI 低于 -120 dBm 或网络类型降级到 2G/EDGE,主动切换。
  3. 应用层显式切换:用户手动开启「离线模式」,应用无条件进入离线缓存读写。
  4. 系统广播事件:监听 Android ConnectivityManager 或 iOS NWPathMonitor 的实时状态变化。
[关键指标] 切换延迟应控制在 < 500ms,切换过程中不能出现数据丢失或重复提交。建议为每次切换生成 sync_session_id 用于追踪。

1.6 本章边界总结

第 1 章完成了离线缓存场景的识别与系统边界定义。后续章节将基于本章确定的三个核心维度(目标、时长、一致性)继续深入:

  • 第 2 章~第 4 章:本地存储结构设计与分层架构。
  • 第 5 章~第 8 章:离线数据库选型与权衡。
  • 第 9 章~第 15 章:同步引擎、冲突解决与信任链路。