缓存数据到数据库常见策略

1. 概述


这节课我们就来搭建我们自己的一个数据库框架,首先先来说下我们为什么需要去缓存数据到数据库,这个是我们这节课的一个重点,如果咱们大家有做新闻类、资讯类的app,那么凡是涉及到需要展示列表的界面,不管是用 ListView、RecyclerView显示的列表,都是必须要缓存该列表的数据的,主要的原因有两点。

2. 原因


原因一:

如果每次进入app时,比如说我们的应用是一个新闻或者资讯的列表,那么你每次一打开app,它都会去服务器中去请求列表数据,如果说网络不是特别好,那么可能需要2-3秒或者更长的时间后台才能返回数据,然后你再去展示到你的列表中,这样用户体验可能并不是特别好,因为用户如果一进来app时发现没有数据,什么都没有,就是一个空白页面,这样可能或多或少都会影响用户体验,所以这个时候缓存列表数据到数据库就显得尤为重要;

原因二:

如果你对需要展示的列表的数据去缓存,那么你完全可以在有网络的时候让它去请求网络,展示最新的数据,如果没有网络或者网络不是特别好的话,就去展示缓存中的内容,这样就不至于在app刚一打开就是白屏,什么都没有,这样用户体验就会稍微好一些;

注意:

做缓存的话必须两端都需要去做缓存,app端和服务器端需要去做缓存,那么我们接下来先看下常规的后台服务器是以及我们的app,它们是如何做缓存的。

3. app客户端和服务器如何做缓存?


3.1:服务器端缓存方法:

后台有一个缓存,还有一个数据库,每次app请求服务器接口时,后台先去查询缓存中是否有数据,如果缓存中有就直接把缓存中的数据返回给app就ok,如果缓存中没有,就去查询数据库,然后把数据给app返回回来,并且把数据再给缓存中保存一份,这样下次app再去请求服务器接口时就直接可以把缓存中的数据给app返回就可以了。

套路就是:服务器有一个缓存,一个数据库,每次app请求接口时服务器端首先先去查缓存,如果缓存有数据就直接返回就ok,如果没有就去查询数据库,然后把数据给app返回回去,并且把数据再给缓存中存储就ok;

3.2:app缓存方法:

比如OKHttp缓存,它是自带缓存,特点就是如果我们访问同一个接口,那么它在规定时间内,是不会去后台请求数据的,而是直接读取缓存的,如果超过规定时间,就会去后台请求数据。

套路就是:比如说规定时间是60秒,它会首先从本地缓存中查询数据,如果没有它会去请求服务器数据,在获取到数据之后就会把数据给缓存中存储一份,那么下一次就会直接从缓存中读取数据,而不会去请求服务器数据了,这个就是 OKHttp的缓存。

注意:

一般第三方的联网请求缓存基本都是这样子的缓存的,比如OKHttp、Retrofit等等这些第三方网络请求框架的缓存基本都类似。

那么接下来我们就来看下,针对于新闻类app我们应该如何去做缓存,才能达到一个相对来说比较好的用户体验。网上的第三方数据库框架特别多,比如:GreenDao、litepal、orm等等,而且用法基本都类似,都是一些套路,而且我们必须要把这些套路玩好,玩6,。但是它们的数据库都是放在 data/data/包名/database目录下边的,如果app卸载了那么数据库就没了。而且我们没有必要去造轮子,但是有的时候我们我们还真就得对一些特定场景进行量身定制,这个是我们今天要做的。

3. 新闻类app如何缓存?


如下图所示:

新闻类app列表数据缓存方式.png

上图意思就是,以下缓存指的是文件或者数据库都可以:

1>:第一次刚进入app时缓存中肯定没有数据,这个时候就会去请求服务器拉取最新数据,并且也要求服务器最好给自己做一个缓存,把刚请求的数据也给自己服务器保存一份,然后返回数据给app端,这个时候app就去在列表中显示数据,并且app客户端的也需要在文件或者数据库中存储一份数据;
2>:第二次app再次打开的时候需要再次显示列表数据的时候,这个时候首先先在自己本地的文件或者数据库查询,如果有数据,就直接给列表显示,与此同时直接去请求服务器拉取最新数据,如果服务器返回数据了,这个时候比较返回的数据和自己本地缓存的数据,如果数据一样,就不去刷新界面也不去存入到数据库,如果不一样,就去刷新本地列表,然后把新的数据再存储到自己本地的文件或者数据库中就行。
注意这里的存储数据的方式是以key-value键值对存储,key是url地址,value值是 返回的json数据,而不是对象,因为对象太大;

就是这样,每次进入app列表先从app的缓存中读取数据,如果有就直接显示在列表,与此同时直接去请求服务器,如果服务器有数据,就返回给app,然后比较客户端的数据库中的数据与返回的数据是否一样,如果不一样,就去重新刷新列表数据,然后给缓存中再去存储一份数据即可;

这种缓存就比较适合类似头条新闻、QQ空间等等的这种数据更新比较快的。

4. 我们为什么要手动搭建数据库框架?


我们之所以自己要手动去搭建数据库框架,是因为一般第三方的数据库,都是存储在 data/data/包名/database中的,如果app卸载了,那么数据库就没有了,而我们自己写的数据库框架,它是存储在外部存储卡中,可以直接导出来查看,非常的方便。

那么下节课我们就来手动搭建我们自己的数据库。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,391评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,342评论 25 709
  • panw3i阅读 2,454评论 0 0
  • 如今,社会生活工作节奏加快,很多人都只能通过电话声音进行交流。在两性的感情交往中,人们也正常使用电话来述说一些普通...
    百家之言阅读 3,698评论 0 0
  • 降压歌 高血压病不可怕,三个穴位搞定它; 太溪太冲加曲池,每穴不少二百下。 坚持按摩两月余,终生抛弃降压药。 若添...
    庄氏整脊阅读 4,028评论 0 2