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