是否可以指定缓存策略?

时间:2018-03-06 15:41:19

标签: swift siesta-swift

是否可以在Siesta中使用如下的缓存策略:

  • 设置LocalOnly
  • NetworkFirst

LocalOnly 仅从本地缓存获取数据, NetworkFirst 从网络获取数据,如果失败,则从本地缓存中检索。< / p>

2 个答案:

答案 0 :(得分:2)

@ nikano的答案是正确的,如果您想在将URLSession用作Siesta的底层网络库时控制其缓存行为。

一般来说,Siesta让底层网络做到了。即使您将其与Siesta一起使用,对URLSession有效的选项也保持不变。

Siesta 本身是一个可观察的内存缓存。它的核心设计特征之一是它可以对您看到,缓存或新鲜的数据进行细粒度控制 - 而且这一点至关重要。你可以使用两者。

如果你想在内存中看到本地缓存的数据,你的“仅限本地”,只需要一个资源:

resource.latestData

如果您想强制网络请求,即使有缓存数据,即您的“仅网络:”

resource.load().onSuccess { ...use the data... }

...如果由于某种原因您想要请求最新数据但让Siesta缓存它:

resource.request(.get).onSuccess { ... }

但是,最常见的习惯是使用两者缓存和新数据:

resource.addObserver(somethingObserverThatUsesTheData)
resource.loadIfNeeded()

在这种情况下,somethingObserverThatUsesTheData首先看到本地缓存的数据(如果有的话),然后查看从网络库返回的数据(如果有网络请求)。

请注意,从网络库返回的数据本身可能会被缓存。在大多数情况下,我建议禁用URLSession的缓存,以便您知道自己正在获取最新数据。但是,在某些情况下,拥有两层缓存可能是正确的。

答案 1 :(得分:1)

是的,您可以使用URLSessionConfiguration

执行此操作
let configuration = URLSessionConfiguration.default
    configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders

// cache policy
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData

缓存策略是NSURLRequest中定义的枚举,我相信你可以找到你正在寻找的选项。

对于localOnly选项,您可以使用:.returnCacheDataDontLoad

对于networkFirst选项,选项.reloadIgnoringLocalCacheData可能适合您