是否可以在Siesta中使用如下的缓存策略:
LocalOnly 仅从本地缓存获取数据, NetworkFirst 从网络获取数据,如果失败,则从本地缓存中检索。< / p>
答案 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
可能适合您