關(guān)于@CacheEvict無(wú)法解決分頁(yè)緩存清除的解決思路
@CacheEvict無(wú)法解決分頁(yè)緩存清除
當(dāng)下比較熱門(mén)的spring緩存就是encache,但是最近在寫(xiě)畢業(yè)設(shè)計(jì)的時(shí)候,發(fā)現(xiàn)了在緩存分頁(yè)的時(shí)候,往往只緩存了一頁(yè)數(shù)據(jù),導(dǎo)致點(diǎn)擊下一頁(yè)的時(shí)候,沒(méi)有響應(yīng)。因此花了點(diǎn)時(shí)間去了解了一想@CacheEvict。
在我們緩存一個(gè)數(shù)據(jù)的時(shí)候,都是緩存在一個(gè)key里面,如下
//這是插入的時(shí)候需要清除緩存key里面的內(nèi)容 @CacheEvict(value = "aboutShop", key = "'selectAllShop'")
//這是一開(kāi)始查詢(xún)的時(shí)候,保存到key的內(nèi)容 @Cacheable(value = "aboutShop", key = "'selectAllShop'")
//這是后來(lái)添加了分頁(yè)的緩存key設(shè)置,這樣緩存分頁(yè)了,但是在插入的時(shí)候,無(wú)法更新到查詢(xún)信息 @Cacheable(value = "aboutShop", key = "'selectAllShop_'+#params.pageNo")
這是我的一個(gè)查詢(xún)分頁(yè)并緩存分頁(yè)一開(kāi)始的寫(xiě)法,然而,每次緩存都是緩存了第一頁(yè)
因此,就去看了一下如何解決
了解了兩種寫(xiě)法::
第一種:用spring AOP的方式,循環(huán)遍歷刪除所有帶有前綴selectAllShop的內(nèi)容,
因?yàn)閑ncache沒(méi)有自帶模糊通配符,所有要自己重寫(xiě)一個(gè)方法進(jìn)行匹配刪除。這里有個(gè)博主講的挺好的,我的第一個(gè)方法就是這樣汲取的。
http://www.dbjr.com.cn/article/134394.htm
接下來(lái)講被我吸收利用到畢業(yè)設(shè)計(jì)里面的第二種方法吧!我看完第一種方法,發(fā)現(xiàn)這種方法循環(huán)遍歷刪除,如果數(shù)據(jù)幾十萬(wàn)條的情況下(雖然我的只有一百多條數(shù)據(jù)),遍歷刪除需要的時(shí)間還是不少的。因此我們可以從encache注解熟悉的value里面下手,
我給出的代碼,是我寫(xiě)好的自定義value名稱(chēng),配置大于約定,我在spring-redis.xml中配置一個(gè)RedisCacheManager管理器,并且配置緩存區(qū)間
<!--配置RedisCacheManager--> <bean class="org.springframework.data.redis.cache.RedisCacheManager" id="redisCacheManager"> <constructor-arg name="redisOperations" ref="redisTemplate"/> <!--設(shè)置過(guò)期時(shí)間--> <property name="defaultExpiration" value="${redis.expiration}"/> <!--配置緩存區(qū)間--> <property name="cacheNames"> <list> <value>aboutUser</value> <value>aboutShop</value>//這是我獨(dú)立出來(lái)的一個(gè)緩存區(qū)間,用來(lái)專(zhuān)門(mén)存放Shop查詢(xún)分頁(yè)的信息 </list> </property> </bean>
在插入信息的時(shí)候使用:
//allentries是指清除value里面的所有內(nèi)容 @CacheEvict(value = "aboutShop", allEntries = true)
這樣就可以實(shí)現(xiàn)插入的時(shí)候,同步緩存分頁(yè)了
spring分頁(yè)緩存
@Cacheable(key = "'myPage_'+#pagePlus.current+'_'+#pagePlus.limit") public void cachePage(Page pagePlus) { }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中使用BigDecimal進(jìn)行精確運(yùn)算
這篇文章主要介紹了Java中使用BigDecimal進(jìn)行精確運(yùn)算的方法,非常不錯(cuò),需要的朋友參考下2017-02-02關(guān)于Spring?Cloud實(shí)現(xiàn)日志管理模塊
這篇文章主要介紹了關(guān)于Spring?Cloud實(shí)現(xiàn)日志管理模塊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Springboot?接口需要接收參數(shù)類(lèi)型是數(shù)組問(wèn)題
這篇文章主要介紹了Springboot?接口需要接收參數(shù)類(lèi)型是數(shù)組問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot中的@ApiModelProperty注解作用
這篇文章主要介紹了SpringBoot中的@ApiModelProperty注解作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01springboot 如何重定向redirect 并隱藏參數(shù)
這篇文章主要介紹了springboot 如何重定向redirect 并隱藏參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09