欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

关于@CacheEvict无法解决分页缓存清除的解决思路

时间:2022-06-21 10:02:21|栏目:JAVA代码|点击:

@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.jb51.net/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) {
}

上一篇:基于mybatis plus实现数据源动态添加、删除、切换,自定义数据源的示例代码

栏    目:JAVA代码

下一篇:浅谈controller中调用多个service方法的问题

本文标题:关于@CacheEvict无法解决分页缓存清除的解决思路

本文地址:http://www.codeinn.net/misctech/205508.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有