相關實體類必須實作序列化接口
使用緩存前,必須讓涉及到緩存javaBean對象實作Serializable接口,否者會報NotSerializableException。因為緩存的原理是将對象序列化後直接寫入資料庫中,如果不實作Serializable接口,會導緻對象無法序列化,進而無法寫入到資料庫中,也就達不到緩存的效果。
示例代碼
涉及到緩存相關的api一共是如下五個:
1. cacheKey
每次架構是根據這個cacheKey去到資料庫中尋找緩存的,是以一般來說,每個不同功能的請求都要設定不一樣的cacheKey,如果相同,會導緻資料庫中的緩存資料發生覆寫或錯亂。如果不指定cacheKey,預設是用url帶參數的全路徑名為cacheKey。
2. cacheMode
目前預設提供了五種CacheMode緩存模式,不同的模式會有不同的Callback回調順序
NO_CACHE:不使用緩存,該模式下cacheKey、cacheTime 參數均無效
DEFAULT:按照HTTP協定的預設緩存規則,例如有304響應頭時緩存。
REQUEST_FAILED_READ_CACHE:先請求網絡,如果請求網絡失敗,則讀取緩存,如果讀取緩存失敗,本次請求失敗。
IF_NONE_CACHE_REQUEST:如果緩存不存在才請求網絡,否則使用緩存。
FIRST_CACHE_THEN_REQUEST:先使用緩存,不管是否存在,仍然請求網絡。
3. cacheTime
目前緩存的有效時間是多長,機關毫秒,上面示例是3600秒,也就是一個小時,這個根據自己需要設定,如果不設定,預設是CacheEntity.CACHE_NEVER_EXPIRE=-1,也就是永不過期。該參數對DEFAULT模式是無效的,因為該模式是完全遵循标準的http協定的,緩存時間是依靠服務端響應頭來控制,是以用戶端的cacheTime參數無效。
4. cachePolicy
這個是自定義的緩存政策,内置的五大緩存模式其實就是這個緩存政策CachePolicy接口的五種不同實作,如果這五種模式不能滿足你,你完全可以自行實作這個接口,寫出屬于你自己的緩存規則。
5. onCacheSuccess
當緩存讀取成功後,回調的是這個方法,如果你隻複寫了onSuccess方法,是無法擷取緩存的,這裡要注意。
緩存的相關操作
我們知道緩存是儲存在資料庫中的,那麼其實緩存的操作也就是資料庫的操作,那麼操作這個資料庫中緩存表的對象是這個CacheManager,它是個單例模式,裡面提供了很多方法,常用的方法如下:
擷取所有的緩存,但是一般每個緩存的資料類型都不一樣,是以緩存的泛型使用 ?
根據cacheKey擷取對應的緩存,一共有以下幾種寫法:
根據cacheKey删除指定緩存,傳回值是否删除成功
清除所有緩存,傳回值是否删除成功
其他操作,自己檢視CacheManager中的方法
項目中使用緩存
一般使用緩存的時候,指定cacheKey和cacheMode就行了,但是遇到清單緩存的時候,我們通常的做法是隻緩存下拉重新整理的第一頁的資料,上拉加載獲得的資料不進行緩存,代碼示例如下: