在Siesta中是否可以使用如下缓存策略:
- 仅限本地
- 网络优先
其中LocalOnly仅从本地缓存中获取数据,而NetworkFirst正在从网络中获取数据,如果失败,则从本地缓存中检索。
如果您想控制将URLSession
其用作 Siesta 的底层网络库时的缓存行为,@nikano 的答案是正确的。
一般来说,Siesta 让底层网络做它的事情。URLSession
即使您将其与 Siesta 一起使用,有效的选项也保持不变。
Siesta本身就是一个可观察的内存缓存。它的核心设计功能之一是它让您可以细粒度地控制您看到的、缓存的或新鲜的数据——这至关重要,这不是一个非此即彼的问题。您可以同时使用两者。
如果您想查看本地缓存在内存中的数据,您的“仅限本地”,只需请求资源即可:
resource.latestData
如果你想强制一个网络请求,即使有缓存的数据,即你的“仅限网络”:</p>
resource.load().onSuccess { ...use the data... }
…如果由于某种原因您想要请求最新数据但没有Siesta 缓存它:
resource.request(.get).onSuccess { ... }
然而,最常见的习惯用法是同时使用缓存数据和新数据:
resource.addObserver(somethingObserverThatUsesTheData)
resource.loadIfNeeded()
在这种情况下,somethingObserverThatUsesTheData
首先查看本地缓存的数据(如果有),然后查看从网络库返回的数据(如果有网络请求)。
请注意,从网络库返回的数据本身可能会被缓存。在大多数情况下,我建议禁用URLSession
的缓存,以便您知道您正在获取最新数据。但是,在某些情况下,拥有两层缓存可能是正确的。
是的,您可以使用URLSessionConfiguration
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
// cache policy
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData
缓存策略是一个在 中定义的枚举NSURLRequest
,我相信您可以在那里找到您正在寻找的选项。
对于localOnly
您可以使用的选项:.returnCacheDataDontLoad
对于networkFirst
选项,也许该选项.reloadIgnoringLocalCacheData
很适合您