溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

@CacheEvict無法解決分頁緩存清除怎么辦

發(fā)布時間:2021-12-31 11:27:57 來源:億速云 閱讀:236 作者:iii 欄目:開發(fā)技術

本篇內容介紹了“@CacheEvict無法解決分頁緩存清除怎么辦”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    @CacheEvict無法解決分頁緩存清除

    當下比較熱門的spring緩存就是encache,但是最近在寫畢業(yè)設計的時候,發(fā)現了在緩存分頁的時候,往往只緩存了一頁數據,導致點擊下一頁的時候,沒有響應。因此花了點時間去了解了一想@CacheEvict。

    在我們緩存一個數據的時候,都是緩存在一個key里面,如下

    //這是插入的時候需要清除緩存key里面的內容
    @CacheEvict(value = "aboutShop", key = "'selectAllShop'")
    //這是一開始查詢的時候,保存到key的內容
    @Cacheable(value = "aboutShop", key = "'selectAllShop'")
    //這是后來添加了分頁的緩存key設置,這樣緩存分頁了,但是在插入的時候,無法更新到查詢信息
    @Cacheable(value = "aboutShop", key = "'selectAllShop_'+#params.pageNo")

    這是我的一個查詢分頁并緩存分頁一開始的寫法,然而,每次緩存都是緩存了第一頁

    因此,就去看了一下如何解決

    了解了兩種寫法::

    第一種:用spring AOP的方式,循環(huán)遍歷刪除所有帶有前綴selectAllShop的內容,

    因為encache沒有自帶模糊通配符,所有要自己重寫一個方法進行匹配刪除。這里有個博主講的挺好的,我的第一個方法就是這樣汲取的。

    http://www.kemok4.com/article/134394.htm

    接下來講被我吸收利用到畢業(yè)設計里面的第二種方法吧!我看完第一種方法,發(fā)現這種方法循環(huán)遍歷刪除,如果數據幾十萬條的情況下(雖然我的只有一百多條數據),遍歷刪除需要的時間還是不少的。因此我們可以從encache注解熟悉的value里面下手,

    我給出的代碼,是我寫好的自定義value名稱,配置大于約定,我在spring-redis.xml中配置一個RedisCacheManager管理器,并且配置緩存區(qū)間

    <!--配置RedisCacheManager-->
        <bean class="org.springframework.data.redis.cache.RedisCacheManager" id="redisCacheManager">
            <constructor-arg name="redisOperations" ref="redisTemplate"/>
            <!--設置過期時間-->
            <property name="defaultExpiration" value="${redis.expiration}"/>
            <!--配置緩存區(qū)間-->
            <property name="cacheNames">
                <list>
                    <value>aboutUser</value>
                    <value>aboutShop</value>//這是我獨立出來的一個緩存區(qū)間,用來專門存放Shop查詢分頁的信息
                </list>
            </property>
        </bean>

    在插入信息的時候使用:

    //allentries是指清除value里面的所有內容
    @CacheEvict(value = "aboutShop", allEntries = true)

    這樣就可以實現插入的時候,同步緩存分頁了

    spring分頁緩存

    @Cacheable(key = "'myPage_'+#pagePlus.current+'_'+#pagePlus.limit")
    public void cachePage(Page pagePlus) {
    }

    “@CacheEvict無法解決分頁緩存清除怎么辦”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI