客户端缓存机制

一.简介

客户端缓存机制不仅可以减轻服务器端的压力,同时也能让用户在网速较慢的情况下获取良好的用户体验。所以构建一个优秀的APP,缓存是很重要的一个环节。

二.处理方案

客户端从服务器获取最新数据,假如是20条,同时将数据缓存到本地,当加载下一页数据时不仅将数据添加到内存中,还要同步到缓存中。这样以此类推,内存中的数据和缓存的数据保持一致。

当用户重新下拉刷新界面时,会出现两种情况:

一种是此时用户数据更改小于一页,第二种是用户数据更改大于一页。

第一种情况比较简单,数据变动小于一页,说明刷新返回的数据加上缓存的数据就可以构建出用户的全部数据,所以此时只需要合并刷新返回的最新数据和缓存的数据,将重复的数据去掉即可。

第二种情况比较复杂,数据变动大于一页,说明刷新返回数据和缓存数据之间还遗漏了部分的数据,那如何去同步这部分的数据呢?

简单的方案是,如果出现这种情况,则重构缓存,重构缓存的意思就是删除旧的缓存信息重新添加建立缓存。这个方案的优点就是实现简单不容易出错,当然缺点就是如果频繁的重构缓存则失去了缓存的意义。

真正的解决中间数据获取的问题,可以通过新建临时的数组的方式,将当前在内存中的数据放入临时的变量中,然后把刷新返回的数据加入内存中,当用户触发加载更多事件时,判断最新返回的数据是不是和临时变量中的数据有重合,有重合说明中间的遗漏数据已经获取完毕,则将临时变量的数据合并到内存中即可。当然内存中的操作都需要同步到缓存中。

用户每次重新进入该模块都会先从缓存中加载数据到内存,然后自动获取最新的数据与内存中的数据合并即可。若用户网络不通的情况下直接展示缓存数据。

异常处理:

网络异常--显示缓存数据

内存溢出--限制缓存条数

三.问题

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

  1. 加载更多时,传入分页的page和size,当用户数据频繁的更新时,会出现冗余的数据,比如第一页的最后两条可能就是第二页的前两条。
  2. 同步问题,在有些业务中,数据大部分是不变的,但是有些数据是会变化的,比如在微博中,微博内容不会变化,但是转发条数,评论数是在变化的。如果仅仅展示缓存中的数据会出现和服务器端不同步的问题
  3. 缓存没有一个清理功能,随着时间的增长,总会出现内存溢出的情况

解决:

问题1:获取数据时分页中加入sinceID和maxID,用以来控制最大和最小的数据ID,这样就能防止冗余的重复数据

问题2:对于频繁的小数据块(如阅读数,分享数)可以制定同步协议,更新这些小数据块时无需更新整体的数据

问题3:内存的增长可以通过限制缓存的条数来控制,当缓存条数超过限制后,为用户重构缓存(大数据块的更新也可以通过定时重构缓存来实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-31 15:33:46

客户端缓存机制的相关文章

Android客户端缓存机制(文字缓存跟多媒体文件缓存)

Android客户端缓存机制(文字缓存和多媒体文件缓存) 客户端缓存机制是android应用开发中非常重要的一项工作,使用缓存机制不仅仅可以为用户节省3G流量,同时在用户体验方面也是非常好的选择. 缓存机制分为两部分,一部分是文字缓存,另一部分是多媒体文件缓存. 缓存文件保存策略: 1.       文字缓存: 文字缓存应该分为两种,一种是更新比较频繁的区域,一种是更新不频繁的区域. 根据两者的更新频率区分它们的过期时间. 更新比较频繁的区域,它的缓存过期时间应该为应用程序内(即应用程序从打开到

Android客户端中Bitmap的下载过程和缓存机制

加载流程: if(内存命中){ 从内存中读取 }else{ create AsyncTasks,task中的多个Runnable是通过堆栈先进后出的方式来调度,而非队列式的先进先出,目的是最先加载用户最近划到或打开的图片. } AsyncTask: //do in background——该后台进程在用户scroll列表的时候会暂停,从而减小了列表划动时cpu的overhead,此方法也被ImageLoader和facebook的官方app所使用. if(磁盘缓存命中){ 从缓存中读取 }els

浏览器缓存机制浅析

非HTTP协议定义的缓存机制 浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires: Cache-control等).但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的<head>节点中加入<meta>标签,代码如下: <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 上述代码的作用是告诉浏览器当前页面不被缓存,每

Varnish缓存机制详细介绍及简单配置

Varnish是一款高性能的开源HTTP加速器,其主要用来做为反向代理中的缓存服务器使用,但其实Varnish本身也是具有反向代理功能的,但在创建连接和维持连接上,与Nginx相比差距很大,现在有一个很流行的架构就是前端用Nginx作为反向代理,后面加Varnish缓存服务器为Web服务加速 在将Varnish前先谈谈我们的浏览器缓存机制,现在的浏览器基本都具有缓存功能,它能将我们以前访问过的静态内容和可进行缓存的动态内容缓存再本地,而后在下次访问相同资源时,如果可以确认Server端的资源未发

【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李志刚 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必须要掌握的知识,但最近我遇到了几个缓存头设置相关的题目,发现有好几道题答错了,有的甚至在知道了正确答案后依然不明白其原因,可谓相当的郁闷呢!!为了确认下是否只是自己理解不深,我特意请教了其他几位小伙

Java缓存学习之三:CDN缓存机制

CDN是什么? 关于CDN是什么,此前网友详细介绍过. CDN是Content Delivery Network的简称,即"内容分发网络"的意思.一般我们所说的CDN加速,一般是指网站加速或者用户下载资源加速. 举个通俗的例子: 谈到CDN的作用,可以用8年买火车票的经历来形象比喻:8年前,还没有火车票代售点一说,12306.cn更是无从说起.那时候火车票还只能在火车站的售票大厅购买,而我所住的小县城并不通火车,火车票都要去市里的火车站购买,而从县城到市里,来回就是4个小时车程,简直就

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

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

浏览器缓存机制详解

对于浏览器缓存,相信很多开发者对它真的是又爱又恨.一方面极大地提升了用户体验,而另一方面有时会因为读取了缓存而展示了"错误"的东西,而在开发过程中千方百计地想把缓存禁掉.那么浏览器缓存究竟是个什么样的神奇玩意呢? 什么是浏览器缓存: 简单来说,浏览器缓存就是把一个已经请求过的Web资源(如html页面,图片,js,数据等)拷贝一份副本储存在浏览器中.缓存会根据进来的请求保存输出内容的副本.当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是

C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Caching 我理解是在内容中实现,这种方法适用于单服务器的生产环境. 2.a Distributed Cache 分部式缓存实现. 3.Response Cache 这种方式我理解为客户端缓存. 今天我只用了第一种实现方法,内存中缓存,之所以用这种方法我是觉得我这里用缓存的初衷是为了减少访问数据库的次数,