现在软件交给网络处理的部分越来越多,用户越来越多,面对的网络条件也就各种各样。虽然现在5G都快来了,但是比如在地铁上、郊区,不知道用户的使用场景是怎么样,所以缓存可以提高App的响应,提高用户的体验。

缓存的使用情况基本分为以下几种:

  1. 只从网络获取数据,且数据不会缓存在本地,这是默认的缓存策略。(保证了数据是最新的,获取失败就不显示内容
  2. 只从缓存读数据,如果缓存没有数据或者缓存过期,返回一个空数组。(单纯的使用缓存数据,获取失败就不显示内容
  3. 只从网络获取数据,同时会在本地缓存数据。 (保证当前使用的数据是最新的,保存缓存供其他地方使用
  4. 先从缓存读取数据,如果没有或者缓存过期再从网络获取。(常用的缓存使用,首次使用的缓存数据,数据不是最新的。后续刷新才是最新数据
  5. 先从网络获取数据,如果没有,此处的没有可以理解为访问网络失败,再从缓存读取。(保存当前使用的数据是最新的数据,获取失败再去读取缓存填充数据
  6. 先从缓存读取数据,无论结果如何都会再次从网络获取数据,在这种情况下,Block将产生两次调用。(通常这种做法是先快速从缓存读取数据显示在界面,然后在后台连接网络获取最新数据,取到后再更新界面。

设置缓存有效性策略去判断是否使用已保存的缓存的几个思路:

  1. 在应用中,可以根据上次缓存的时间去判断,比如不经常变的商品列表、用户信息等,可以设置一小时的有效期,对于不同更新频率的数据可以采取更短或者更长的缓存时长。
  2. 也可以在某个接口不使用缓存数据,而根据这个接口去请求服务器最新信息,让服务器告诉你是否需要更新缓存了,当然这种虽然更灵活,但是也很麻烦,处理不好效果可能更差
  3. 可以根据自己的需求强制去更新缓存操作,比如下拉刷新时去强制更新缓存数据,用户操作更新最新数据去强制让缓存过期等

1、不使用缓存的情况

在网络请求较少的情况下,基本不需要缓存,就是请求服务器获得数据,然后更新视图。所以流程是下面这样的:

1.png

2、有缓存的时候只读取缓存,没缓存的时候去更新缓存

这种是最常用的请求方式,当有缓存的时候,判断缓存是否是否有效去进行下一步操作。

因为缓存在有效期内数据都是一样的,所以如果是服务器控制弹窗,比如新手红包的话,使用缓存可能会造成弹窗重复弹出,所以需要针对不同请求做对应的处理

存在缓存且缓存有效的情况流程如下:

2.png

缓存不存在或者缓存过期的情况流程如下:

3.png

  1. 先发起请求,判断是否存在缓存
  2. 不存在缓存或者缓存过期,去请求服务器最新信息
  3. 请求到最新数据去更新本地缓存和刷新数据,同时将缓存有效期更新

3、有缓存就先读取缓存,然后再去更新最新的请求

这个和第二种情况的区别就是第二种先判断缓存是否在有效期内,不在有效期内才去更新请求。

而这个情况先读取缓存是为了填充数据,例如用户打开软件首页,先去显示数据再去更新最新数据

流程如下:

5.png

  1. 发起请求,如果有缓存先使用缓存更新一次页面
  2. 请求服务器最新信息
  3. 请求到最新数据去更新本地缓存和刷新数据,同时将缓存有效期更新

4、单纯的读取缓存

这个就是多了一个数据源而已,如果有缓存就读取缓存,没有缓存就不操作。

总之增加缓存模块的目的是要提高用户体验交互的,所以缓存的目的在于:

  1. 效率,缓存的目的是为了提高性能,不要因为缓存的原因反而降低了性能;因为缓存其实就是将数据暂时存在内存或者硬盘里,所以有了读写操作,对于频繁更新的数据可以不使用缓存。
  2. 数据实时性,对于数据缓存的实时性,各种缓存的手机都有自己的策略,如通过设置过期时间、定时刷新等操作。

☟☟可点击下方广告支持一下☟☟

最后修改:2019 年 07 月 04 日
请我喝杯可乐,请随意打赏: ☞已打赏列表