温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

@CacheEvict无法解决分页缓存清除怎么办

发布时间:2021-12-31 11:27:57 来源:亿速云 阅读:246 作者:iii 栏目:开发技术

本篇内容介绍了“@CacheEvict无法解决分页缓存清除怎么办”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    @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没有自带模糊通配符,所有要自己重写一个方法进行匹配删除。这里有个博主讲的挺好的,我的第一个方法就是这样汲取的。

    https://www.yisu.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)

    这样就可以实现插入的时候,同步缓存分页了

    spring分页缓存

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

    “@CacheEvict无法解决分页缓存清除怎么办”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI