一.简单介绍

client缓存机制不仅能够减轻server端的压力,同一时候也能让用户在网速较慢的情况下获取良好的用户体验。

所以构建一个优秀的APP,缓存是非常重要的一个环节。



二.处理方案

client从server获取最新数据,假如是20条,同一时候将数据缓存到本地,当载入下一页数据时不仅将数据加入到内存中。还要同步到缓存中。

这样以此类推,内存中的数据和缓存的数据保持一致。


当用户又一次下拉刷新界面时,会出现两种情况:
一种是此时用户数据更改小于一页。另外一种是用户数据更改大于一页。


第一种情况比較简单。数据变动小于一页。说明刷新返回的数据加上缓存的数据就能够构建出用户的所有数据,所以此时仅仅须要合并刷新返回的最新数据和缓存的数据,将反复的数据去掉就可以。

另外一种情况比較复杂。数据变动大于一页,说明刷新返回数据和缓存数据之间还遗漏了部分的数据,那怎样去同步这部分的数据呢?
简单的方案是,假设出现这样的情况,则重构缓存。重构缓存的意思就是删除旧的缓存信息又一次加入建立缓存。这个方法的长处就是实现简单不easy出错,当然缺点就是假设频繁的重构缓存则失去了缓存的意义。
真正的解决中间数据获取的问题。能够通过新建暂时的数组的方式。将当前在内存中的数据放入暂时的变量中,然后把刷新返回的数据增加内存中,当用户触发载入很多其它事件时,推断最新返回的数据是不是和暂时变量中的数据有重合,有重合说明中间的遗漏数据已经获取完成,则将暂时变量的数据合并到内存中就可以。当然内存中的操作都须要同步到缓存中。

用户每次又一次进入该模块都会先从缓存中载入数据到内存,然后自己主动获取最新的数据与内存中的数据合并就可以。

若用户网络不通的情况下直接展示缓存数据。


三.问题

上述方案中会遇到下面几个问题:

  1. 载入很多其它时。传入分页的page和size,当用户数据频繁的更新时。会出现冗余的数据,比方第一页的最后两条可能就是第二页的前两条。

  2. 同步问题,在有些业务中,数据大部分是不变的,可是有些数据是会变化的,比方在微博中,微博内容不会变化,可是转发条数,评论数是在变化的。假设只展示缓存中的数据会出现和server端不同步的问题
  3. 缓存没有一个清理功能。随着时间的增长,总会出现内存溢出的情况
解决:
问题1:获取数据时分页中增加sinceID和maxID。用以来控制最大和最小的数据ID。这样就能防止冗余的反复数据
问题2:对于频繁的小数据块(如阅读数。分享数)能够制定同步协议,更新这些小数据块时无需更新总体的数据
问题3:内存的增长能够通过限制缓存的条数来控制,当缓存条数超过限制后。为用户重构缓存(大数据块的更新也能够通过定时重构缓存来实现)



异常处理:
网络异常--显示缓存数据
内存溢出--限制缓存条数

client缓存机制的更多相关文章

  1. hibernate缓存机制(转)

    原文出处:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是 ...

  2. JPA,EclipseLink 缓存机制学习(一) 树节点搜索问题引发的思考

    最近在项目在使用JPA+EclipseLink 的方式进行开发,其中EclipseLink使用版本为2.5.1.遇到一些缓存方面使用不当造成的问题,从本篇开始逐步学习EclipseLink的缓存机制. ...

  3. 浏览器 HTTP 协议缓存机制详解

    最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control.为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag, ...

  4. 理解 QEMU/KVM 和 Ceph(1):QEMU-KVM 和 Ceph RBD 的 缓存机制总结

    本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...

  5. Hibernate 缓存机制

    一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...

  6. 进击的Hybrid App,量身定做缓存机制

    引用张图,简单粗俗的解释下 Native App.Web App 和 Hybrid App Navtie App: 使用平台系统提供的原生语言来编写的 App,如果Android用java,ios用o ...

  7. [http] http缓存机制

    原文链接:http://my.oschina.net/leejun2005/blog/369148 1.缓存的分类 缓存分为服务端侧(server side,比如 Nginx.Apache)和客户端侧 ...

  8. Hibernate 缓存机制二(转)

    感谢:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是一个 ...

  9. hibernate中的缓存机制

    一.为什么要用Hibernate缓存? Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数据源中的数 ...

随机推荐

  1. python强大的数据类型转换

    # 原始的二维表数据集 jsonObj=[] # 添加模拟的数据 for i in range(1001,1004): for j in range(1,34): jsonObj.append({&q ...

  2. Asp.Net Core WebAPI入门整理(一)

    一.Asp.Net Core  WebAPI 1.目前版本是v1.1 2.默认路由处理和Asp.Net WebAPI有些 区别了,现在使用的是控制器路由[Route("api/Menu&qu ...

  3. MySQL 实现将一个库表里面的数据实时更新到另一个库表里面

    MySQL 实现将一个库表里面的数据实时更新到另一个库表里面 需求描述:MySQL 里面有很多的数据库,这些数据库里面都有同一种表结构的表 (tb_warn_log),这张表的数据是实时更新的,现在需 ...

  4. [js]BOM篇

    一.什么是BOM BOM(Browser Object Model)即浏览器对象模型. BOM提供了独立于内容 而与浏览器窗口进行交互的对象: 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对 ...

  5. 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise

     Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱 ...

  6. Xamarin iOS教程之自定义视图

    Xamarin iOS教程之自定义视图 Xamarin iOS自定义视图 工具栏中的视图在实际应用开发中用的很多,但是为了吸引用户的眼球,开发者可以做出一些自定义的视图. [示例2-33]以下将实现一 ...

  7. HTML基础单页面总结(基于w3school教程)

    学习了一阵http://www.w3school.com.cn网站上的html教程,发现各个知识点比较分散,个人比较倾向于用一页html文档就把所有涉及的基本html标签元素知识点都展示出来的形式.个 ...

  8. BZOJ.3680.吊打XXX(模拟退火/爬山算法)

    题目链接 一个比较好的解释? 模拟退火(Simulated Annealing,SA): (1)初始化一个温度(充分大).初始解状态S.每个T值的迭代次数. (2)对i=1,...,L,做(3)至(7 ...

  9. 《linux/unix设计思想》读后感

    <linux/unix设计思想>这本书,觉得书的大部分内容都闲扯的太远了,以下简单的总结下本书的核心,帮助大家节省时间和金钱. linux/unix设计思想: 1) 程序应该小而专一,程序 ...

  10. NOI经验谈

    对于NOI来说,甚至比硬实力更加重要.我觉得一场考试这么几件事要做:看题,选题,分析,编码,调试,测试,骗分. 1.看题 拿到试卷以后的第一件事就是看题.看题不是看小说,要仔细阅读.当然,阅读也不宜过 ...