外观
超时、重试、缓存与幂等怎么一起设计?
标准回答
超时是调用方停止等待;重试是再次尝试;幂等保证重复请求不会产生额外业务副作用;缓存复用可接受的新鲜度范围内的结果。
关键机制
- 设置每次调用与总体预算;可恢复错误才重试,采用退避与抖动,并限制次数。不要对永久参数错误持续重试。
- 写操作可能已成功但回包丢失,需业务幂等键或查询结果;HTTP 方法语义本身不能替代完整业务设计。
- 缓存要定义键、过期、失效和用户隔离;区分 HTTP Cache-Control / ETag 与应用自定义缓存。
通俗例子
“开启设备”请求超时,盲目重试相对容易做到幂等;“增加一次计费”必须带业务唯一键并由服务端去重。
易混淆点
取消客户端请求不保证服务端撤销已执行操作;界面需要根据最终可确认状态呈现结果。
参考资料
内容来源
- Android 技术札记 · 原条目
retry-cache