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

 更新时间:2021年12月31日 09:45:43   作者:你听_我说  
这篇文章主要介绍了关于@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.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) {
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • ShardingSphere-Proxy5搭建使用过程分析

    ShardingSphere-Proxy5搭建使用过程分析

    ShardingSphere-Proxy是跨语言的数据库代理服务端,主要用来处理:分表、分库、读写分离 等,这篇文章主要介绍了ShardingSphere-Proxy5搭建使用过程,需要的朋友可以参考下
    2022-10-10
  • java动态代理详解

    java动态代理详解

    本文章要用很土的语言描述Java动态代理,力求更易被理解。Java是JDK5中新加的机制,大家都知道Spring是用Java的动态代理实现的,那这个动态代理是什么东东呢,首先他肯定是个代理,我们先讲代理,把代理弄明白了,动态代理就好说了
    2014-02-02
  • OpenFeign实现微服务间的文件下载方式

    OpenFeign实现微服务间的文件下载方式

    这篇文章主要介绍了OpenFeign实现微服务间的文件下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java排序算法中的快速排序算法实现

    Java排序算法中的快速排序算法实现

    这篇文章主要介绍了Java排序算法中的快速排序算法实现,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,需要的朋友可以参考下
    2023-12-12
  • spring声明式事务@Transactional底层工作原理

    spring声明式事务@Transactional底层工作原理

    这篇文章主要为大家介绍分析spring声明式事务@Transactional底层工作原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-02-02
  • 解决persistence.xml配置文件修改存放路径的问题

    解决persistence.xml配置文件修改存放路径的问题

    这篇文章主要介绍了解决persistence.xml配置文件修改存放路径的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • java中Hutool包的常用方法总结

    java中Hutool包的常用方法总结

    这篇文章主要为大家详细介绍了java在工作中中Hutool包的一些常用方法总结,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • SpringBoot可视化监控的具体应用

    SpringBoot可视化监控的具体应用

    最近越发觉得,任何一个系统上线,运维监控都太重要了,本文介绍了SpringBoot可视化监控的具体应用,分享给大家,有兴趣的同学可以参考一下
    2021-06-06
  • Java多线程之显示锁和内置锁总结详解

    Java多线程之显示锁和内置锁总结详解

    这篇文章主要介绍了Java多线程之显示锁和内置锁总结详解,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 5分钟搭建SpringCloud Eureka服务注册中心的实现

    5分钟搭建SpringCloud Eureka服务注册中心的实现

    这篇文章主要介绍了5分钟搭建SpringCloud Eureka服务注册中心的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论