移动端缓存增量更新

移动端缓存增量更新

  在app的时候, 为了用户体验, 一般都会引入缓存来加速app的运行. 而缓存这东西用的好则是倚天剑, 用的不好, 容易带进脏数据.

这里来说说移动端缓存增量更新的设计思想. 以通讯录为例子.

通讯录

  场景1 : app上没有任何缓存记录.

  场景2 : app上存在缓存记录, 但是有一段时间没有使用改app, 不能确保缓存为最新.

  场景3:  app正在使用缓存.

  在上述三个场景中, 最麻烦的就是场景2, 因为可能会出现server在app不使用的时间段对通讯录中的信息进行了CRUD操作.

这里我们一步一步的分析场景2的解决方案.

updateTime And isDeleted

  为了应付场景2, 通常采用增量更新的手段, 即每条数据都加上update_time字段, 来确认哪些数据是在app不使用的时间生成的. 从而使得app再次使用的时候, app发送通讯录最近更新时间戳给server, server能返回正确的更新包给app. 以CRUD分步说明:

  1. 对于C(新增): 如果server向数据库中通讯录添加一条数据, 且该数据的update_time为server当前时间. 这样子,app 在同步的时候, 服务器就知道什么数据是在不使用app时间段生成的.

  2. 对于R(读取):无任何影响

  3. 对于U(更新): server修改通讯录条目的时候, 也修改update_time为server当前时间.  这样子,app 在同步的时候, server就知道什么数据是在不使用app时间段更新的.

  4. 对于D(删除): server如果删除(硬删除)通讯录中的条目, 则app在同步的时候, server无法确定什么数据在不使用app时间段被删除, 如果按照update_time 比较方式处理, 会出现app有脏数据(应该被删除的数据未被删除). 为了解决该问题这里需要再添加一个标志isDeleted, 表示该数据是否被删除. 这样子, 在服务器删除数据的时候, 就可以更新isDeleted=true, 同时该数据的update_time为server时间. 因此, 在app同步的时候, 就可以知道在不使用app的时间段, 什么数据被删除.

  到此, 就比较好的解决了场景2的问题, 而场景1和场景3, 可以认为是场景2的特例.

  增量更新的基本原理就是添加update_time表示, 因为时间是有序的, 所以可以找到从固定点发生变化的数据. 如果数据会被删除, 为了避免缓存没有删除server中被删除的数据, 所以采用软删除的方式.

时间: 2024-12-19 10:28:24

移动端缓存增量更新的相关文章

一个简单的数据增量更新策略(Android / MongoDB / Django)

我在做个人APP - CayKANJI - 的时候遇到一个问题: 怎样增量式地把日语汉字数据地从服务器更新到APP端,即每次用户执行更新操作时,只获取版本高于本地缓存的内容. 数据格式 为了能够与mongoDB无缝结合,并省去编写后台代码的麻烦,索性就把汉字数据保存成json文件,上传到服务器后,交给web应用去读取并写入数据库. 汉字文件就是普通的json格式. { "category": "行為ー2", "contents": [ { &qu

最全的增量更新入门 包含linux端和Android

简介 增量更新大量用于 Android各大应用市场.本文想做网络上从服务器到app客户端完整讲解.app用eclipse和android studio 最新版cmark开发ndk 如下图: 以前一直好奇怎么做的直到知道了bsdiff库. 地址附上: bsdiff源码地址和简介 大家可以从简介看到bsdiff是基于bzip2源码(bsdiff和bspatch一个用于生成差异文件补丁,另一个用于差异文件和旧文件合成新文件) 下载地址说明 应用市场原理说明 假设你用的是"XXX市场"点击更新

谈谈混合 App Web 资源的打包与增量更新

综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包工具.本文提到的思路只是一家之言,基本没有参考现有方案,各位方家有不同意见欢迎留言.另外本文没有涉及到 App 内部如何加载资源的问题,这部分我会专门撰写一篇文章讨论. 需求梳理 一般来说,Hybrid-app 对于 Web 资源下载有如下需求: 页面开启速度要快,所以资源的下载和使用不是在同一时间

Unity5 怎样做资源管理和增量更新

工具 Unity 中的资源来源有三个途径:一个是Unity自己主动打包资源.一个是Resources.一个是AssetBundle. Unity自己主动打包资源是指在Unity场景中直接使用到的资源会随着场景被自己主动打包到游戏中.这些资源会在场景载入的时候由unity自己主动载入.这些资源仅仅要放置在Unityproject目录的Assets目录下即可,程序不须要关心他们的打包和载入,这也意味着这些资源都是静态载入的. 但在实际的游戏开发中我们一般都是会动态创建GameObject.资源是动态

9大浏览器端缓存机制分析

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制. 一.http缓存 http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器端请求文件

【转载】Unity 合理安排增量更新(热更新)

原帖地址:由于我看到的那个网站发的这篇帖子很大可能是盗贴的,我就暂时不贴地址了.避免伤害原作者 原版写的有点乱,我个人修改整理了下. ---------------------------------------------------------------------------------------------------- 工具 Unity 中的资源来源有三个途径:一个是Unity自动打包资源,一个是Resources,一个是AssetBundle. Unity自动打包资源是指在Uni

APP增量更新

增量更新的概念: 当我们手机上安装的app版本与服务器的最新版本不一致的时候,传统做法是重新下载安装一个最新版的apk文件,不过这种方式比较耗流量,不利于用户体验.增量更新就是只下载当前app版本与最新版本的差异内容,然后与当前版本就行合并成最新版本再安装.目前支持增量更新的应用市场 有GooglePlay.360手机市场等. 增量更新的原理: 使用开源工具bsdiff对新版apk和旧版apk进行二进制文件比较,得到patch补丁文件,然后使用开源工具bspatch将旧版apk和补丁文件合并,重

9中浏览器端缓存

浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存的机制种类较多,总体归纳为九种,这里详细分析下这九种缓存机制的原理和使用场景.打开浏览器的调试模式->resources左侧就有浏览器的8种缓存机制.    一.http缓存   http缓存是基于HTTP协议的浏览器文件级缓存机制.即针对文件的重复请求情况下,浏览器可以根据协议头判断从服务器

开源 Android App 增量更新库 版本升级

开源 Android App 增量更新库 版本升级 经过几天的重构,我将之前写的一个Android 应用增量更新的示例程序重构为了一个开源库,现在已经push 到 GitHub 上,欢迎大家Watch.Star.Fork. 包含以下内容: 服务器端生成差异包的工程:AppUpdate 客户端使用的开源apk合并库:ApkPatchLibrary 引用ApkPatchLibrary,实现增量更新的ApkPatchLibraryDemo 旧版本的微博Android客户端,以及服务端生成的新旧微博差分