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

作者:你听_我说 时间:2023-07-06 20:22:44 

@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) {
}

来源:https://blog.csdn.net/weixin_39236419/article/details/88810726

标签:@CacheEvict,分页,缓存,清除
0
投稿

猜你喜欢

  • 浅谈Java与C#的一些细微差别

    2022-09-25 06:33:36
  • Android studio so库找不到问题解决办法

    2023-10-28 02:20:49
  • win7中C#的winForm编程使用savefiledialog不能弹出保存窗体的解决方法

    2022-09-18 07:27:57
  • Android图片无限轮播的实现代码

    2023-02-12 14:57:20
  • C# PDF Page操作设置页面切换按钮的方法

    2021-11-18 04:33:43
  • Springcloud微服务架构基础知识解析

    2023-01-26 14:37:10
  • Java中Set集合的使用和底层原理解析

    2022-12-16 20:54:28
  • Android实现短信验证码自动填写功能

    2022-01-21 13:12:10
  • C# ref and out的使用小结

    2021-12-19 22:35:40
  • 详细了解C语言二叉树的建立与遍历

    2021-08-17 10:24:01
  • 关于maven:pom文件的使用解析

    2022-02-08 06:21:41
  • 快速解决android webview https图片不显示的问题

    2021-09-23 22:38:52
  • Flutter 快速实现聊天会话列表效果示例详解

    2022-10-21 09:18:31
  • C++实现哈夫曼编码

    2022-07-20 20:39:01
  • c语言中十六进制转二进制显示的实现方法

    2023-12-17 23:21:44
  • SQLServer批量插入数据的三种方式及性能对比

    2022-07-01 12:05:07
  • Java单例模式利用HashMap实现缓存数据

    2021-12-15 20:21:42
  • 关于C#数强转会不会抛出异常详解

    2021-11-09 05:44:48
  • C#如何防止程序多次运行的技巧

    2022-11-10 01:18:59
  • 使用Files.walkFileTree遍历目录文件

    2021-09-27 06:12:40
  • asp之家 软件编程 m.aspxhome.com