OkHttp3.7缓存原理分析

版权声明:有些文章写的很随意,那是仅作为个人记录的文章,建议直接关掉,多看一秒亏一秒 https://blog.csdn.net/qq_36523667/article/details/79976522

学习自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管理日志不用多看,只需要知道一个读写分离即可

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页