Springboot @CacheEvict报异常

三十三 SpringBoot整合@CacheEvict注解使用 CacheEvict作用:清除缓存 UsersServiceImpl.java @Override @Cacheable(value="users") public List<Users> findUserAll() { return usersRepository.findAll(); } @Override // @CacheEvict(value="us... 阅读详情

问题

使用Springboot Cache,缓存用的Redis,代码如下:

@CacheEvict(value="user", allEntries = true)
public void addUser(User user) {
    this.users.put(user.getId(), user);
}

执行上面代码时报了如下错误:

ERR unknown command `KEYS`

原因

Springboot CacheEvict的默认实现,如果allEntries = true,则使用Redis KEYS命令来清除缓存。KEYS命令可能会带来性能问题,因此生产环境可能会禁用KEYS命令,结果造成异常。

解决方案

网上有许多相关文章,多是查看Springboot代码,然后自己进行扩展,改用Scan命令去修复。其实新版的Springboot(比如最新的3.7.1)已经提供了Scan实现,自己配置一下就行了。

@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
    /* 默认配置, 默认超时时间为30s */
    RedisCacheConfiguration defaultCacheConfig =RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration
                                                                                                       .ofMinutes(Long.valueOf(10))).disableCachingNullValues();
    RedisCacheManager cacheManager = RedisCacheManager.builder(RedisCacheWriter.lockingRedisCacheWriter
                                                           (connectionFactory, 
BatchStrategies.scan(1000))).cacheDefaults(defaultCacheConfig).transactionAware().build();
return cacheManager;
}

精通SpringBoot缓存管理:@Cacheable与@CacheEvict实战应用 SpEL是一种基于字符串的表达式语言,可以实现与Java类、方法、对象属性、数组等的交互。它提供了一系列操作符、函数和关键字,使得开发者可以在表达式中组装和操作对象图。SpEL的主要作用包括但不限于:查询对象属性:获取对象的属性值。调用方法:在运行时调用对象的方法。访问数组和集合:操作集合类型的元素。逻辑运算:执行逻辑运算和比较运算。类型转换:在需要时进行类型转换。 阅读详情

相关推荐

auboi5 + d435i 使用easy handeye进行标定时,遇到相关问题记录。

解决办法:在easy_handeye默认的 calibrate.launch 文件中move group 的默认值为 "manipulator",但针对每个人的机械臂,这个值需要更改。以aubo_i5为例,需要将其改为"manipulator_i5",或者自己编写launch文件时,传入参数move group的值,便能顺利解决问题!easy_handeye_calibration_server 进程出现崩溃。

weixin_61025092的博客 958

使用@CacheEvict(value = “xxx“, allEntries = true),导致redis报错,ERR unknow command ‘KEYS‘;nested exception

使用@CacheEvict(value = “xxx”, allEntries = true) 导致redis报错: nested exception is redis.clients.jedis.exceptions.JedisDataException: ERR unknow command ‘KEYS’; 优化方式: 注释此注解 然后在注解@CacheEvict的方法中加入批量清除缓存如下,用scan代替keys命令 @Autowired private RedisTemplate

MyfishCake的博客 5974

知识图谱与人工智能本体论:构建机器认知的语义基石

本文探讨了知识图谱与人工智能本体论如何作为机器认知的语义基石,让AI从‘知道数据’迈向‘理解知识’。文章详细拆解了本体论的核心构件与构建方法,并阐述了从本体到知识图谱的实践路径,包括知识获取、融合、存储及推理应用,最终分析了其在智能搜索与专家系统等场景中带来的根本性重塑。

nginx7reverse的博客 912

redis keys命令被禁用,spring缓存 @CacheEvict报异常

背景:项目使用springboot整合redis做缓存,代码中使用spring的缓存注解配置缓存策略。在jarvis上部署时接入了公司分布式redis平台代替本地的redis。结果测试的时候,新增一条记录时报了错,提示ERR unknown command 'keys' 。 经排查发现问题原因:新增记录的函数上有@CacheEvit,用于废弃redis中的缓存。推测是由于底层使用了redis的 keys命令进行缓存key的规则匹配。而生成环境禁用了Keys命令,导致报错。 一、spring 源码解...

weixin_37726399的博客 5146

FPGA+滨淞CCD实战:手把手教你搭建S7031/S10142成像电路(附避坑指南)

本文详细介绍了使用FPGA驱动滨淞CCD传感器(S7031/S10142)构建高精度成像系统的完整实战流程。内容涵盖核心器件选型、系统架构规划、电路板(焦面板与接口板)设计要点、FPGA Verilog逻辑实现,并提供了从电源管理、信号调理到数据采集的详细避坑指南,帮助读者从零搭建稳定可靠的成像电路。

weixin_29271263的博客 229

Node-RED教程(二):Node-RED的面板的操作

Node-RED系列(二):Node-RED的面板的操作 要使用Node-RED去搭建一个物联网平台,链接设备,设备通信,就必须要先熟悉Node-RED的这种面板,对于一个新的项目,在动手做之前一点想对这个的技术的文档有足够的了解做起来才能游刃有余。本期我给大家介绍一下Node-RED的各种面板,熟悉这些面板后,在后续的搭建Iot服务中,会举重若轻,同时该系列的文档,难度会逐步加深,知道了本章解释的名称后对后续文章的理解有很大帮助。 面板1:默认节点选项列表 安装Node-RED后默认的节点分为这5大类

知无涯 1万+

【缓存】Spring全家桶中@CacheEvict无效情况共有以下几种

SpringBoot中使用@Cacheable注解缓存数据,使用@CacheEvict注解删除缓存。但是在项目使用过程中,发现使用@CacheEvict注解删除缓存无效。拓展:@CacheEvict 就是一个触发器,在每次调用被它注解的方法时,就会触发删除它指定的缓存的动作。跟 @Cacheable 和 @CachePut 一样,@CacheEvict 也要求指定一个或多个缓存,也指定自定义的缓存解析器和 key 生成器,也支持指定条件(condition 参数)。

No8g攻城狮的博客 6135

DCM07-诊断服务EcuReset ($11 )的配置和实现

文章目录1 诊断服务EcuReset ($11 )1.1 概述1.2 诊断模式声明组1.3 代码实现1.4 配置参数 传送门 ==>> AutoSAR实战系列300讲「糖果Autosar」总目录 1 诊断服务EcuReset ($11 ) 1.1 概述 该服务实现了 ECU 内的复位功能,协议的具体理论讲解请参考「FlashBootloader03【电控单元复位服务($11)】」。在接收到UDS 服务 0x11 的请求时,DCM 模块应触发 ModeDeclarationGroupPrototy

2066

springboot的ehcache的@CacheEvict清除缓存

一@CacheEvict的作用 1.1 总体概述 @CacheEvict是用来标注在需要清除缓存元素的方法或类上的。 当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。 @CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的语义与@Cacheable对应的属性类似。 即value表示清除操作是发生在哪些Cache上的(对应Cache的名称);key表...

健康平安的活着的专栏 6160

044.树莓派4B部署YOLO:从系统烧录到模型运行

《树莓派4B部署YOLOv8实战笔记》摘要:本文详细记录了在ARM架构树莓派4B上部署YOLOv8的全流程。关键点包括:必须使用64位系统并手动编译OpenCV(禁用FFMPEG、开启NEON优化);模型需在x86转换为TFLite格式(分辨率不超过320×320);推理代码使用tflite_runtime替代TensorFlow以减少内存占用;针对USB摄像头卡顿、内存泄漏等典型问题给出了解决方案。

2603_95664987的博客 169

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

SMFA(自调制特征聚合模块): SMFA模块用于协同建模局部和非局部信息,它分为两个分支:一个是EASA(Efficient Approximation of Self-Attention,简化的自注意力分支),用于捕获非局部信息;另一个是LDE(Local Detail Estimation,局部细节估计分支),用于捕获局部细节。EASA通过对输入特征进行下采样,然后利用全局特征的方差进行调制,再与原始特征进行聚合,提取非局部结构信息。LDE分支则通过卷积操作提取输入特征中的高频局部信息。

qq_64693987的博客 2208

SpringBoot之缓存@CacheEvict

背景: 当我们使用缓存机制后,会存在缓存清理的需求,如果不进行清理,将会造成缓存被大量使用,导致程序奔溃异常。 1.@CacheEvict的清除缓存使用。 当allEntries没有进行设置,将默认清除的内容是函数的参数保持一致。也就是清除的是key为Id的缓存数据。 如果allEntries进行了设置,并且为true时候,就是表示,当调用该函数的时候就会清除emp缓存单元中所有的缓存数据。 /** * @CacheEvict缓存清除 */ @CacheEv.

gcglhd的博客 2622

风电光伏功率预测竞赛精华总结:技术解析与实战经验

本文深度解析新能源功率预测竞赛的技术要点与实战经验。首先介绍了风电、光伏功率预测对电网调度优化、降低运营风险的重要性,以及多个竞赛的基本概况。在数据特征分析部分,详细探讨了气象预报数据和功率数据的特征,包括时间周期性、数据质量问题及处理方法。针对异常值检测、数据标准化和特征工程(如时间特征、统计聚合特征、风速风向特征和滞后特征)提供了具体的技术实现方案。文章为新能源功率预测提供了实用的技术指导,对相关竞赛和实际应用具有重要参考价值。

算法工程师 206

Springboot缓存注解@Cache,@CacheEvict,@CacheConfig使用

@Cacheable @Cacheable 的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存, 参数 解释 example value 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 例如: @Cacheable(value=”mycache”) @Cacheable(value={”cache1”,”cache2”} ...

友桥的博客 6230

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SpringBoot缓存注解@Cacheable、@CacheEvict、@CachePut详解

SpringBoot缓存注解详解 核心思想 调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回 准备工作 声明那些方法需要缓存 配置cache缓存(注解\xml两种方式) @cacheable详解 可以标记一个方法或者一个类,标记方法时,cache会缓存方法返回的结果,标记类时,该类的所...

fuu123f的博客 1680

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringBoot整合Redis使用@Cacheable、@CachePut和@CacheEvict注解方式

一,缓存注解 @Cacheable、@CachePut和@CacheEvict 这些都是org.springframework.cache.annotation包下的缓存注解。 @Cacheable:根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。 注解属性: 常用属性: value 缓存名,必填,它指定了你的缓存存放在哪块命名空间 cac

我爱吃红薯的博客 2443

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

springboot缓存注解——@CacheEvict

@CacheEvict:缓存清除 可以通过key指定清除的数据 如果不写默认参数的值 allEntries = true (是否删除该缓存名中所有数据,默认为false) beforeInvocation = true(缓存清除是否在方法之前执行,默认false,代表在方法执行之后执行) false的坏处:如果方法出现异常则不会清除缓存 //清楚的缓存名称为...

weixin_30314793的博客 245

Spring Boot 中的 @CacheEvict 注解

在本文中,我们介绍了 Spring Boot 中的 @CacheEvict 注解,包括它的含义、原理以及如何使用。@CacheEvict 注解是清空缓存的一种有效方式,可以帮助我们更好地管理缓存,提高应用性能。在实际开发中,我们应该根据实际需求来合理地使用缓存注解,以达到最佳的性能优化效果。

程序员徐师兄的博客 8460

Spring Boot 中的 @CacheEvict 注解使用

在本文中,我们介绍了 Spring Boot 中的 @CacheEvict 注解,包括它的含义、原理以及如何使用。@CacheEvict 注解是清空缓存的一种有效方式,可以帮助我们更好地管理缓存,提高应用性能。在实际开发中,我们应该根据实际需求来合理地使用缓存注解,以达到最佳的性能优化效果。

stormjun的博客 1869

SpringBoot使用Redis做缓存,@Cacheable、@CachePut、@CacheEvict等注解的使用

缓存注解的使用 @Cacheable从缓存中查询指定的key,如果有,从缓存中取,不再执行方法.如果没有,则执行方法,并且将方法的返回值和指定的key关联起来,放入到缓存中。 参数: value缓存名、 key缓存键值、 condition满足缓存条件、unless否决缓存条件 参数 解释 example value 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 例如: @Cacheable(value=”mycache”) @Cacheable

pc的博客 1617

SpringBoot进阶教程(五十三)整合Redis之@Cacheable、@CachePut、@CacheEvict的应用

在上一篇文章(《SpringBoot(二十四)整合Redis》)中,已经实现了Spring Boot对Redis的整合,既然已经讲到Cache了,今天就介绍介绍缓存注解。各家互联网产品现在数据量越来越大,其快速增长造成网络拥塞和服务器超载,导致客户访问延迟增大,服务质量日益显现出来。缓存技术被认为是减轻服务器负载、降低网络拥塞、增强可扩展性的有效途径之一。 v概念介绍 Spr...

weixin_30475039的博客 230

Spring的Cache组件 - @Transactional + @CacheEvict 在同一方法上声明,删除缓存异常是否导致事务回滚?

删除缓存异常是否会导致事务被回滚,取决于事务、缓存拦截器的执行先后!而这与 @EnableTransactionManagement 与@EnableCaching的声明顺序 正相关 !与ProxyCachingConfiguration、ProxyTransactionManagementConfiguration的装载执行先后 逆相关 !

noob_can的博客 762

SpringBoot学习-part52使用@CacheEvict

删除数据时结合此注解@CacheEvict,可以清空对应的缓存。 @CacheEvict(cacheNames = {"emp"}/*,key = "#id"*/,allEntries = true,beforeInvocation = false) public void deleteEmp(Integer id){ System.out.println("删除员工"); //employeeMapper.deleteEmpById(id); }

Ezerbel的博客 503

SpringBoot注解缓存@Cacheable,@CachePut,@CacheEvict,@Caching

JSR107 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry。• CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可 以在运行期访问多个CachingProvider。• CacheManager定义了创建、配置、获取、管理和控制多个唯...

ai_goodStudent的博客 730
上一篇: Virtualbox安装Ubuntu遇到的坑
下一篇: 从哪里下载OpenJDK
ken_coding
博客等级 码龄4年 239粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值