是否可以指定缓存策略?



是否可以在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选项非常适合您

相关内容

  • 没有找到相关文章

最新更新