java - OkHttp 缓存如何工作?

标签 java okhttp

我最近将现有的为每个请求创建一个新客户端的实现更改为一个标准的单例客户端。

现在,当我开始阅读文档时,我发现还有一个正在使用的称为缓存的东西。有一些内容说,多个缓存尝试访问同一个缓存目录可能最终会导致它们互相踩踏并导致崩溃。

我正在查看的文档位于他们的 github 存储库中:

okhttp recipes for regular issues faced

我的问题:

我没有专门为我的客户端设置任何缓存或缓存控制。只需几个超时值和一个连接池。如果我为每次调用使用新的请求和响应对象,默认情况下会进行任何缓存吗?

client = new Okhttpclient.Builder()
              . connectTimeout (10000,TimeUnit.MILLISECONDS)
              .readTimeout(15000,TimeUnit.MILLISECONDS)
              . connectionPool (new ConnectionPool ())
              .build();

上面的客户端被设置为单例并返回给所有调用的servlet。请求创建为

  Request req = new Request.Builder()
                  .url(someurl)
                  .get()
                  .build();

  Response res = client.newCall(req).execute();

如果是的话,是否会出现上述跺 footer 分的问题。我根本不需要缓存,因为大多数情况下我只是将内容写入另一台服务器,当我阅读时,我确实需要它是当前值而不是缓存......那么我是否需要显式设置缓存-control 设置为force-network 或者我的默认未指定设置是否相同?

编辑:这是 Response caching 的摘录部分文档

To cache responses, you'll need a cache directory that you can read and write to, and a limit on the cache's size. The cache directory should be private, and untrusted applications should not be able to read its contents!

It is an error to have multiple caches accessing the same cache directory simultaneously. Most applications should call new OkHttpClient() exactly once, configure it with their cache, and use that same instance everywhere. Otherwise the two cache instances will stomp on each other, corrupt the response cache, and possibly crash your program.

最佳答案

为每个客户端实例设置OkHttp缓存目录。该文档告诉您的是,您不应将多个客户端配置为使用同一缓存目录。缓存必须显式启用,并且在您问题的代码片段中未启用。

在客户端实例上配置缓存后,您可以控制每个请求的响应缓存。请参阅Cache

关于java - OkHttp 缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49088641/

相关文章:

android - 膨胀 gzip HTTP 响应正文时获取 "source exhausted prematurely"

selenium - 线程 "main"java.lang.NoClassDefFoundError : okhttp3/ConnectionPool with Selenium and Java 中的异常

java - 我们如何在 Java 8 中批量创建 Arraylist?

java - 已成功安装用于 eclipse 的 azure toolkit for java 插件,但未显示任何选项 “New Azure Deployment Project”

java - Retrofit2 POST 方法获取代码 400,但适用于 ReSTLet 客户端

android - OkHttpClient 有时会收到不完整的 json 响应

android - 改造 HTTPS 连接在 Android 中不起作用

java - TableLayout 中的 TextView 数组

java - 如何将列乘以ListView中的数字,Android

Java 创建二维链表(数据结构)