OkHttp3.7缓存原理分析

学习自https://yq.aliyun.com/articles/78102?spm=a2c4e.11153940.blogcont78105.14.785137beBUL1wW


温馨提示

在熟练掌握HTTP协议后,会看起来很舒服,因为就是HTTP协议的东西在Andorid中的实现


CacheIntercept

他的缓存机制自然离不开缓存拦截器了


Cache类

内部有一个disk lru cache,判断指标是requestCount,networkCount,hitCount

大意应该是,我们发起请求的次数,发起请求越过了本地缓存成功到达互联网的次数(也就是没有用强制缓存的次数),我们成功在缓存中找到该缓存的次数


CacheStrategy类

内部维护一个request和response,通过他们来描述我们的数据是从缓存获取还是从网络获取,抑或同时使用


CacheIntercept的intercept方法大体逻辑

先根据我们的request去找缓存的response

再根据我们的request去找缓存策略,找到策略了,在缓存中更新hitcount

如果我们的缓存response不符合策略,对response的body进行一个手动的关闭

如果没网,且没符合的缓存,504

如果没网,但是有符合的缓存,返回缓存

进行真正网络请求

(下面是对比缓存逻辑)

当有缓存的时候,如果服务端NOT_MODIFIED,则使用缓存,否则就更新缓存


缓存策略的大体逻辑

如果本地没缓存,发起网络请求

如果是HTTPS,但是没有进行TLS握手,需要重新发起网络请求

如果缓存策略为不缓存或者是对比缓存,发起网络请求

缓存age(时间点)与fresh(缓存有效时间段)时间

如果 age + min-fresh >= max-age && age + min-fresh < max-age + max-stale,则虽然缓存过期了,但是缓存继续可以使用,只是在头部添加110警告码


DiskLruCache管理日志不用多看,只需要知道一个读写分离即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值