首页
学习
活动
专区
圈层
工具
发布

OKHttp源码解析(六)--中阶之缓存基础

PS:在OKHTTP中,使用FileSystem作为缓存载体(磁盘相对于网络缓存),使用LRU作为页面置换算法(封装了LinkedHashMap)。...今天主要是讲解OKHTTP中的缓存处理,那么首先先简单介绍下为什么要用缓存 二、为什么要用缓存 缓存对移动端非常重要,使用缓存可以提高用户体验,用缓存的主要在于: 1 减少请求次数,较少服务器压力...客户端当二者缓存至缓存数据库中。...如果缓存中没有响应,那么返回一个状态码为504的响应。 CacheControl类中还有其他方法,这里就不一一介绍了。想了解的可以去API文档查看。...类详解 CacheStrategy 缓存策略类 OKHTTP使用了CacheStrategy实现了上面的流程图,它根据之前缓存的结果与当前将要发送Request的header进行策略,并得出是否进行请求的结果

1.2K50

OKHttp源码解析(七)--中阶之缓存机制

上一章主要讲解了HTTP中的缓存以及OKHTTP中的缓存,今天我们主要讲解OKHTTP中缓存体系的精髓---DiskLruCache,由于篇幅限制,今天内容看似不多,大概分为两个部分 1.DiskLruCache...=null,则表明Entry数据时脏的DIRTY,所以不能读,进而删除Entry下的缓存文件,并且将Entry从lruEntries中移除。...至此所有的关于缓存的相关类都介绍完毕,为了帮助大家更好的理解缓存,咱们在重新看下CacheInterceptor里面执行的流程 三.OKHTTP的缓存的实现---CacheInterceptor的具体执行流程...(一)原理和注意事项: 1、原理 (1)、okhttp的网络缓存是基于http协议,不清楚请仔细看上一篇文章 (2)、使用DiskLruCache的缓存策略,具体请看本片文章的第一章节 2、注意事项..., Response)方法 主要就是通过配置好的cache写入缓存,都是通过Cache和DiskLruCache来具体实现 总结:缓存实际上是一个比较复杂的逻辑,单独的功能块,实际上不属于OKhttp上的功能

1.3K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Gradle 构建工具 #5 又冲突了!如何理解依赖冲突与版本决议?

    因此,动态版本适合用在强调使用依赖项最新版本的场景,项目会更加积极地拥抱依赖项的最新版本,当仓库中存在依赖项的最新版本时,动态版本直接解析为依赖项的最新版本(还需要满足缓存超时的前提)。...快照版本会在每次构建时到远程仓库中检查依赖项产物的最新版本(还需要满足缓存超时的前提)。...1.3 调整不稳定版本的解析策略 在默认情况下, Gradle 会按照 24 小时缓存有效期缓存动态版本和变化版本的解析结果,在缓存有效期间,Gradle 不会检查远程仓库来获取最新的依赖项。...3.1 对比 Maven 和 Gradle 的解析策略 不同的构建系统设计的解析策略不同,我们以 Maven 为对比: Maven 最短路径策略 Maven 构建系统会采用最短路策略,构建系统会选择从根模块到依赖项的最短路来选择版本...:okhttp:{strictly 4.10.0; prefer 3.10.0} -> 4.10.0 (*) exclude 排除规则 使用 exclude 可以根据 GAV 坐标排除间接依赖,也常用于解决前面提到的依赖实现冲突问题

    1.5K30

    从2开始,在Go语言后端业务系统中引入缓存

    本次我们接着上两篇文章进行讲解《从0开始,用Go语言搭建一个简单的后端业务系统》和《从1开始,扩展Go语言后端业务系统的RPC功能》,如题,需求就是为了应对查询时的高qps,我们引入Redis缓存,让查询数据时不直接将请求发送到数据库...,而是先通过一层缓存来抵挡qps,下面我们开始今天的分享:1 逻辑设计图片如图,本次缓存设计的逻辑就是在查询时首先查询缓存,如果查询不到则查询数据库(实际中不建议,会发生缓存穿透),在增删改时会先改数据库...,再改缓存。...(info NumInfo) UnmarshalBinary(data []byte) error { return json.Unmarshal(data, &info)}4 总结引入Redis缓存是后端业务中应对高并发查询比较常见的一个做法...在本次项目中可以说缓存设计的相对简单,针对Key的查询并没有增加缓存,当然也是为了方便演示。今天的分享就到这里。我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

    44800

    OkHttp:Android HTTP客户端入门指南

    但要注意,回调方法运行在OkHttp的工作线程中,如果需要更新UI,要切换到主线程。发送POST请求POST请求用于向服务器提交数据。...OkHttp的缓存机制网络请求消耗电量和流量,OkHttp提供了内置的缓存支持:```java// 创建缓存目录File cacheDirectory = new File(context.getCacheDir...OkHttpClient client = new OkHttpClient.Builder() .cache(cache) .build();```OkHttp会根据HTTP头部的缓存控制指令自动管理缓存...解决:使用异步API或在工作线程中执行请求。SSLHandshakeException:SSL握手失败。 解决:检查服务器证书,可能需要配置自定义的TrustManager。...解决:使用异步API或在工作线程中执行请求。SSLHandshakeException:SSL握手失败。 解决:检查服务器证书,可能需要配置自定义的TrustManager。

    34310

    从API迭代中解放!GraphQL的优缺点与团队价值

    从调用方的角度,可以非常方便且自由地增加查询字段。 图片 从左边的调用图来看,请求了hero的friends成员,里面包含多个对象。如右图所示,可以很方便地聚合返回 1.2....2.2 开发价值——后端 对应后端开发同学而言,也有如下的价值: 减少针对性API设计 业务迭代时,修改方便 便捷文档(Code As Doc) 减少针对性API设计这点,主要体现在,比如针对『不同前端展示的字段不同...』这类需求,传统做法是,用如下不同的URL来区分 - api/app - api/miniapp 图片 而使用GraphQL,后端不需要改变/新增接口,前端可以通过自定义请求参数来控制返回的数据。...2.3 业务价值 对于业务的价值如下: 两端接口定义更方便理解 前端扩张数据控制权 后端从接口适配中解放 图片 GraphQL的灵活性,决定了前端无需与后台对齐接口,就可以开发。...如果团队要使用GraphQL的话,也需要为其配备专门的鉴权、缓存等组件框架,目前这方面生态只能说勉强够用,在内部使用比较方便,如果对外商用的话,可能需要重新设计一套标准。 图片 4.

    4K341

    【死磕 Spring】----- IOC 之从单例缓存中获取单例 bean

    bean,在上篇博客 【死磕 Spring】----- 加载 bean 之 开启 bean 的加载提到过,Spring 对单例模式的 bean 只会创建一次,后续如果再获取该 bean 则是直接从单例缓存中获取...到这里从缓存中获取 bean 的过程已经分析完毕了,我们再看开篇的代码段,从缓存中获取 bean 后,若其不为 null 且 args 为空,则会调用 getObjectForBeanInstance(...缓存中获取实例对象 object,若 object 为空,则调用 doGetObjectFromFactoryBean() 方法从 FactoryBean 获取对象,其实内部就是调用 FactoryBean.getObject...最后加入到 FactoryBeans 缓存中。 该方法应该就是创建 bean 实例对象中的核心方法之一了。...至此,从缓存中获取 bean 对象过程已经分析完毕了。 下面两篇博客分析,如果从单例缓存中没有获取到单例 bean,则 Spring 是如何处理的?

    1.5K40

    HTTP客户端连接,选择HttpClient还是OkHttp?

    所以从使用、性能、超时配置方面进行比较 使用 HttpClient和OkHttp一般用于调用其它服务,一般服务暴露出来的接口都为http,http常用请求类型就为GET、PUT、POST和DELETE,...通过addPart上传文件 DELETE请求: @Test public void testDelete() throws IOException { String api = "/api/user.../12"; String url = String.format("%s%s", BASE_URL, api); HttpDelete httpDelete = new HttpDelete...【省略】 OkHttp使用 使用OkHttp发送请求主要分为一下几步骤: 创建OkHttpClient对象 创建Request对象 将Request 对象封装为Call 通过Call 来执行同步或异步请求...一旦设置了超时时间,所有请求类型的超时时间也就确定 HttpClient和OkHttp性能比较 测试环境: CPU 六核 内存 8G windows10 每种测试用例都测试五次,排除偶然性 client

    3.8K20

    Caused by: org.gradle.workers.internal.DefaultWorkerExecutor

    ✅ 常见场景 & 解决清单场景解决方式Kotlin 重复只保留 kotlin-stdlib-jdk8,把老的 kotlin-stdlib 排除掉:implementation('xxx') { exclude...annotations/JvmPlatformAnnotationsKt.class'}}⚠️ 这只能让构建通过,运行时仍可能 NoSuchMethodError 或 ClassCastException,务必后续排除真正的重复依赖...✅ 根治模板(示例)假设日志提示:Duplicate class okhttp3.internal.Utilin modules okhttp3-3.14.9 and okhttp-2.7.5做法:configurations.all...{exclude group: 'com.squareup.okhttp', module: 'okhttp' // 老版本}// 只保留 3.ximplementation 'com.squareup.okhttp3...推荐阅读Cannot fit requested classes in a single dex file (# methods: 93047 > 65536)【Android】开发者模式启用开发工具链推荐API

    17310

    OkHttp深度解析:Android网络请求的王者利器

    前言说到Android开发中的网络请求库,OkHttp绝对是绕不过去的存在!!!这个由Square公司开源的HTTP客户端,已经成为了Android开发者心目中的白月光。...性能出众OkHttp内部做了大量优化。连接池复用、GZIP压缩、响应缓存......这些听起来很高深的技术,OkHttp都帮你搞定了。结果就是:请求更快,流量更省,用户体验更好!...API设计人性化用过OkHttp的都知道,它的API设计真的很舒服。链式调用让代码看起来清爽干净,即使是复杂的请求配置也能一目了然。...响应缓存机制缓存是提升用户体验的重要手段。...总结OkHttp作为Android开发中的网络请求利器,确实称得上是行业标杆。它不仅功能强大、性能出色,而且API设计友好,使用起来很舒服。当然,工具再好也需要正确使用。

    35510

    由浅入深,聊聊OkHttp的那些事(很长,很细节)

    支持HTTP/2, 并且允许对同一个主机的所有请求共享一个套接字(HTTP/2); 简化Api:Api设计简单明了,易于使用,可以轻松发起请求获取响应,并处理异常。...常见问题 OkHttp如何判断缓存有效性? 这里其实主要说的是 CacheInterceptor 拦截器里的逻辑,具体如下: OkHttp 使用 HTTP协议 中的 缓存控制机制 来判断缓存是否有效。...如果请求头中包含 "Cache-Control" 和 "If-None-Match" / "If-Modified-Since" 字段,OkHttp 将根据这些字段的值来决定是否使用缓存或从网络请求响应...相应的,OkHttp 也支持自定义缓存有效性控制,开发者可以创建一个 CacheControl 对象,并将其作为请求头添加到 Request 中,如下所示: // 禁止OkHttp使用缓存 val cacheControl...结语 本篇中,我们从网络库的迭代历史,一直到 OkHttp 的使用方式、设计思想、源码探索,最后又聊了聊常见的一些问题,从而较系统的了解了 OkHttp 的方方面面,也解释了 OkHttp应用层 的相关问题

    2.5K30

    OkHttp基础概念解释

    大多数应用应该只调用一次new OkHttpClient(),配置它们的缓存,并在所有地方使用相同的实例。否则两个缓存实例会相互进行干涉。 同时OkHttp还支持对缓存的时间和大小进行设置。...在OkHttp中,address的一些字段来自URL(机制,主机名,端口),剩下的来自OkHttpClient。...当连接出现问题时,OkHttp会选择另外一个route进行尝试。一旦接收到服务端的响应,连接就会返回到池中,这样它可以在之后的请求复用,连接空闲一段时间会从池中移除。...拦截器 看过OkHttp源码分析的同学对于拦截器肯定不会陌生,在OkHttp中拦截器是所有的网络请求的必经之地,拦截器主要有以下一些作用。...应用拦截器 不需要关心像重定向和重试这样的中间响应; 总是调用一次,即使HTTP响应从缓存中获取服务; 监视应用原始意图。

    2.4K10
    领券