2016-06-14 44 views
3

其实我有一个关于抽象缓存管理的小混乱。假设我有一个BASE URL为http://example.com的API,但是当我打电话给我的API时,我追加了一个布局参数,所以最后它看起来像http://example.com?sort_by=distance哪个网址需要无效清除抽头缓存?

所以,如果我想要清除缓存此网址哪一个应该我的钥匙 http://example.comhttp://example.com?sort_by=distance

如果答案是第二个,然后做我需要独立清除缓存,通过不同的创建的所有网址url params。

+0

这看起来像我正在访问一个web服务,它不缓存数据... – DaMachk

+0

我的网站让我缓存url数据。但有时当我得到更新标志时,我需要清除缓存并再次调用api。 – user3177222

+1

Inside [Request.java](https://android.googlesource.com/platform/frameworks/volley/+/2afdd91aba3a7a5396fe96dfe8f930661e56ea9a/src/com/android/volley/Request.java)/ ** '*返回缓存键对于这个请求。默认情况下,这是网址。 */ public String getCacheKey(){ return getUrl(); }'然后'公共请求(int方法,String url,Response.ErrorListener监听器)mMethod = method; mUrl = url; mErrorListener = listener; setRetryPolicy(new DefaultRetryPolicy()); }' – BNK

回答

0

凌空(我猜所有其他缓存系统)使用确切详细的URL调用作为缓存数据的关键。 如果你想删除一个缓存条目,你需要通过确切的完整链接。 链接“www.example.com/amir?id=1”与“www.example.com/amir?id=2”不同。否则缓存会比效率更麻烦。

0

顺便说一句,你不需要删除缓存。考虑到一些因素,这是一些抽象的处理。

如果您需要调用链接跳过客户端和服务器中的所有缓存系统,最简单的方法是在API调用的最后放置一个时间戳。 如果你的链接是www.example.com/amir/id/2让你的链接像这样=>www.example.com/amir/id/2?timestamp=54461

通过Java的System.currentTimeMillis()生成时间戳前面的数字。您可以将它除以数字以使缓存值在一段时间内有效。