是否可以在Siesta中使用缓存策略,例如:
- 仅限本地
- 网络第一
其中,LocalOnly仅从本地缓存中获取数据,而 NetworkFirst则从网络获取数据,如果失败,则从本地缓存中检索。
如果要在将URLSession
用作Siesta的底层网络库时控制的缓存行为,则@nikano的答案是正确的。
一般来说,Siesta让底层网络做它的事情。即使您将其与 Siesta 一起使用,对URLSession
有效的选项也保持不变。
午睡本身是一个可观察的内存缓存。它的核心设计功能之一是,它使您可以精细控制您看到的数据,缓存或新鲜 - 而且至关重要的是,这不是一个非此即彼的问题。您可以同时使用两者。
如果你想查看本地缓存在内存中的数据,你的"仅限本地",只需向资源请求它:
resource.latestData
如果你想强制网络请求,即使有缓存的数据,即你的"仅网络:">
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
选项非常适合您