关于@CacheEvict无法解决分页缓存清除的解决思路
作者:你听_我说 发布时间:2023-07-06 20:22:44
标签:@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) {
}
来源:https://blog.csdn.net/weixin_39236419/article/details/88810726
0
投稿
猜你喜欢
- 这篇文章主要介绍了springboot集成fastDfs过程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 本文我想跟大家分享的是如何将 C# 中的一些图像对象保存到 Oracle 中的 BLOB 字段中,这里我们并不想从零开始,而是使用我自己的框
- SpringAOP获取方法参数上的注解一、示例① 如下代码,自定义一个参数注解@Test,并将其使用到方法参数上,用于标注需要检验的参数/*
- 主要用的是org.apache.tools.zip.ZipOutputStream 这个zip流,这里以Execl为例子。思路首
- 类必须先定义才能使用。类是创建对象的模板,创建对象也叫类的实例化。下面通过一个简单的例子来理解Java中类的定义:public class
- 关于Plupload的介绍,相信它的官网http://www.plupload.com/已经给得很详细了。Plupload的上传原理简单点说
- Zuul 简介Zuul 的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如 /api/admin 转发到到 Admin 服务,/a
- 报错信息:java.lang.Exception: org.apache.hadoop.mapreduce.task.reduce.Shuf
- 在Java中,不像Python一样直接用个input()就行的。Java控制台输入比较麻烦,下面是比较易懂的教程。首先,新建一个调用Java
- 导入thymeleaf<dependency> <groupId>org.springframework
- 本文实例讲述了java实现列表、集合与数组之间转化的方法。分享给大家供大家参考。具体实现方法如下:package test; i
- springboottest测试依赖和使用<dependency> <groupId>or
- Java的在还没有发现新写法之前时,我一直是这么初始化List跟Map://初始化List List&l
- 前言MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手
- 前面我们讲到了Spring在进行事务逻辑织入的时候,无论是事务开始,提交或者回滚,都会触发相应的事务事件。本文首先会使用实例进行讲解Spri
- SpringMVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody
- 引入:前段时间去银行办业务,排队的人那是真多,自己正式办理业务也就不到5分钟,但是却足足等了两个小时(相信很多人都遇到过这种情况),对这种服
- MVC三层架构我们在刚刚成为程序员的时候,就会被前辈们 “教育” 说系统的设计要遵循 MVC(Model-View-Controller)架
- Math.PI 记录的圆周率Math.E 记录e的常量Math中还有一些类似的常量,都是一些工程数学常用量。Math.ab
- springBoot集成Elasticsearch 报错 Health check failed今天集成Elasticsearch 时启动报