2016-06-14 50 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()生成時間戳前面的數字。您可以將它除以數字以使緩存值在一段時間內有效。