您好,登錄后才能下訂單哦!
本篇內容介紹了“@CacheEvict無法解決分頁緩存清除怎么辦”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
當下比較熱門的spring緩存就是encache,但是最近在寫畢業設計的時候,發現了在緩存分頁的時候,往往只緩存了一頁數據,導致點擊下一頁的時候,沒有響應。因此花了點時間去了解了一想@CacheEvict。
在我們緩存一個數據的時候,都是緩存在一個key里面,如下
//這是插入的時候需要清除緩存key里面的內容 @CacheEvict(value = "aboutShop", key = "'selectAllShop'")
//這是一開始查詢的時候,保存到key的內容 @Cacheable(value = "aboutShop", key = "'selectAllShop'")
//這是后來添加了分頁的緩存key設置,這樣緩存分頁了,但是在插入的時候,無法更新到查詢信息 @Cacheable(value = "aboutShop", key = "'selectAllShop_'+#params.pageNo")
這是我的一個查詢分頁并緩存分頁一開始的寫法,然而,每次緩存都是緩存了第一頁
因此,就去看了一下如何解決
第一種:用spring AOP的方式,循環遍歷刪除所有帶有前綴selectAllShop的內容,
因為encache沒有自帶模糊通配符,所有要自己重寫一個方法進行匹配刪除。這里有個博主講的挺好的,我的第一個方法就是這樣汲取的。
http://www.neiyidaogou.com/article/134394.htm
接下來講被我吸收利用到畢業設計里面的第二種方法吧!我看完第一種方法,發現這種方法循環遍歷刪除,如果數據幾十萬條的情況下(雖然我的只有一百多條數據),遍歷刪除需要的時間還是不少的。因此我們可以從encache注解熟悉的value里面下手,
我給出的代碼,是我寫好的自定義value名稱,配置大于約定,我在spring-redis.xml中配置一個RedisCacheManager管理器,并且配置緩存區間
<!--配置RedisCacheManager--> <bean class="org.springframework.data.redis.cache.RedisCacheManager" id="redisCacheManager"> <constructor-arg name="redisOperations" ref="redisTemplate"/> <!--設置過期時間--> <property name="defaultExpiration" value="${redis.expiration}"/> <!--配置緩存區間--> <property name="cacheNames"> <list> <value>aboutUser</value> <value>aboutShop</value>//這是我獨立出來的一個緩存區間,用來專門存放Shop查詢分頁的信息 </list> </property> </bean>
在插入信息的時候使用:
//allentries是指清除value里面的所有內容 @CacheEvict(value = "aboutShop", allEntries = true)
這樣就可以實現插入的時候,同步緩存分頁了
@Cacheable(key = "'myPage_'+#pagePlus.current+'_'+#pagePlus.limit") public void cachePage(Page pagePlus) { }
“@CacheEvict無法解決分頁緩存清除怎么辦”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。