首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring缓存的AbstractCacheInvoker doPut()方法错误地调用了RedisCache put()方法

Spring缓存的AbstractCacheInvoker doPut()方法错误地调用了RedisCache put()方法。

首先,让我们来了解一下Spring缓存的基本概念和工作原理。Spring缓存是一种轻量级的缓存解决方案,它能够在应用程序中提供缓存支持,以提高系统的性能和响应速度。在Spring中,缓存的实现是通过注解或编程方式将方法的返回结果存储在内存中,当相同的方法再次被调用时,可以直接从缓存中获取结果,而不必重新执行方法。

关于Spring缓存的使用方式和配置,可以参考Spring官方文档:Spring Caching

接下来,我们来讨论AbstractCacheInvoker doPut()方法错误地调用了RedisCache put()方法的问题。在Spring中,AbstractCacheInvoker是缓存的抽象调用者,它提供了一系列的方法用于操作缓存。而RedisCache是Spring提供的基于Redis的缓存实现。

在问题中提到的错误是AbstractCacheInvoker doPut()方法错误地调用了RedisCache put()方法。通过仔细分析代码,我们可以发现这个错误可能是由于参数传递错误导致的。可能是传递给doPut()方法的参数与RedisCache put()方法的参数不匹配,或者参数类型不正确。这种错误的调用可能会导致缓存数据无法正确地存储到Redis缓存中,从而导致缓存功能无法正常工作。

要解决这个错误,我们需要检查AbstractCacheInvoker doPut()方法的实现代码,确保参数传递正确,并且调用了RedisCache put()方法时传递正确的参数。同时,我们也需要确保Redis缓存的配置正确,并且与Spring缓存的配置相匹配。

对于Spring缓存中的错误调用问题,可以通过阅读Spring源代码、查找官方文档、搜索社区论坛等方式进行排查和解决。另外,还可以通过调试和日志输出等方式定位和分析错误的具体原因。

总结起来,AbstractCacheInvoker doPut()方法错误地调用了RedisCache put()方法可能是由于参数传递错误导致的。解决这个问题的关键是确保参数传递正确,并且检查Redis缓存的配置与Spring缓存的配置是否相匹配。

腾讯云的相关产品推荐:在腾讯云上,可以使用云数据库Redis来作为Spring缓存的后端存储。云数据库Redis是一种高性能、高可用、内存存储的NoSQL数据库,它提供了丰富的功能和API,可以满足各种应用场景的需求。

更多关于云数据库Redis的信息和产品介绍,可以参考腾讯云官方文档:云数据库 Redis

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第一篇:SpringBoot高级-缓存入门

;并支持使用JCache(JSR-107)注解简化我们开发; Cache接口为缓存组件规范定义,包含缓存各种操作集合; Cache接口下Spring提供了各种xxxCache实现;如RedisCache...,EhCacheCache , ConcurrentMapCache等; 每次调用需要缓存功能方法时,Spring会检查检查指定参数指定目标方法是否已经被调用过;如果有就直接从缓存中获取方法调用后结果...使用Spring缓存抽象时我们需要关注以下两点; 确定方法需要被缓存以及他们缓存策略 从缓存中读取之前缓存存储数据 重要概念和缓存注解 Cache 缓存接口,定义缓存操作。...实现有:RedisCache、EhCacheCache、ConcurrentMapCache等 CacheManager 缓存管理器,管理各种缓存(Cache)组件 @Cacheable 主要针对方法配置...; 4、将目标方法返回结果,放进缓存中ConcurrentMapCache.put(); ​ @Cacheable标注方法执行之前先来检查缓存中有没有这个数据,默认按照参数值作为key去查询缓存

63240

玩转Spring Cache --- @Cacheable@CachePut@CacheEvict注解原理深度剖析和使用【享学Spring

前言 上篇文章介绍了@EnableCaching,用它来开启Spring缓存注解支持。本篇文章将继续分析Spring Cache,并且讲解是我们最为关心缓存注解实操方面的原理支持和使用。...开发过程中因注解优雅、使用简单使得这种方式广泛被大家所接受和使用,本文将按照先原理,再实操步骤,一步步解惑Spring缓存注解原理 缓存注解 关于Spring缓存注解,一共有如下5个: @Cacheable...处理缓存注解步骤总结 Spring Cache是Spring框架核心模块之一,不可谓不重要。用了好几篇文章专门来讲解使用、分析原理。...执行对应doPut / doGet / doEvict / doClear 等等。...大多数情况下我们都不需要特别的指定缓存注解使用管理器,因为它自己会去容器里找。 但是,但是,但是当你使用了多套缓存时,我还是建议显示指定

11.4K51

玩转Spring Cache --- @Cacheable@CachePut@CacheEvict缓存注解相关基础类打点【享学Spring

若我们需要扩展缓存注解能力,对这些抽象是非常有必要深入了解~ Spring内置三大注解缓存是: Cacheable:缓存 CacheEvict:删除缓存 CachePut:更新缓存 CacheOperation...,就是获取标注在方法缓存注解们。...Nullable protected abstract CacheOperationSource getCacheOperationSource(); } CacheErrorHandler 处理缓存发生错误策略接口...在大多数情况下,提供者抛出任何异常都应该简单被抛出到客户机上,但是在某些情况下,基础结构可能需要以不同方式处理缓存提供者异常。...总结 本篇文章为讲解缓存注解深入原理分析进行铺垫,所以密切关注这篇文章: 【小家Spring】玩转Spring Cache — @Cacheable/@CachePut/@CacheEvict注解使用以及原理深度剖析

5K31

maven+springmvc+mybatis+redis 缓存查询实例,附有源码地址,使用redis注解和hash数据格式set,get两种方式讲解

redis配置文件对应缓存管理器id值 key = "'insertUser'":是你要缓存到redis中值,下次spring会直接通过key获取结果。...注意key值中还有个单引号。 @Cacheable:适合查询,有返回值方法上。因为,每次请求在进入方法之前,spring会先从缓存服务器中查找对应key,如果有,就直接返回。...因为spring不会事先去缓存服务器中查询数据,而是直接执行方法,然后将结果通过key保存到缓存中。这样是防止数据不一致。 以上都写好后可以启动服务器,然后运行。...为了明显,我在serviceImpl中查询方法中有个输出,你可以先注释掉缓存注解运行,发现每次都会输入。当你启动注解时,没有输入。说明spring每次回自动到缓存中查找数据。...,并且步骤下面的方法,这里我是没看懂是什么原理,所以我这里又写了第二种方法,在系统启动时把需要缓存表数据以hash数据机构加载到redis中。

57020

玩转Spring Cache --- 整合分布式缓存Redis Cache(使用Lettuce、使用Spring Data Redis)【享学Spring

前言 最近都在聊Spring缓存抽象Spring Cache,上篇文章深入介绍了Spring Cache集成进程缓存第三方组件如Caffeine、Ehcache,若对此篇文章感兴趣,可移步观看...:【小家Spring】玩转Spring Cache — 整合进程缓存之王Caffeine Cache和Ehcache3.x 我们知道现在应用大都以微服务方式进行分布式部署,因此如果仅仅使用本地缓存是...so,本文就以大伙最关心、最熟悉Redis这个缓存产品为例,让它和Spring Cache集成,达到分布式中心缓存效果(支持缓存直接直接操作)。...方法,都是带有TTL,因为Redis是支持过期时间嘛 // 多疑依托于此方法,我们其实最终可以定义出支持TTL缓存注解,下篇博文见 void put(String name, byte[] key...、unlock处理,有兴趣可以看看此类,因为不是本文重点,所以此处不说明了 // 其余方法,都是调用了execute方法 @Override public void put(String name

5.6K31

Java Web现代化开发:Spring Boot + Mybatis + Redis二级缓存

至此,我们已经成功在项目中集成了Mybatis,增添了与数据库交互能力。但是这还不够,一个现代化Web项目,肯定会上缓存加速我们数据库查询。...接下来,将介绍如何科学将Redis集成到Mybatis二级缓存中,实现数据库查询自动缓存。 集成Redis 配置Redis 同访问数据库一样,我们需要配置Redis连接信息。...该接口共有以下五个方法: String getId():mybatis缓存操作对象标识符。一个mapper对应一个mybatis缓存操作对象。...如果获取到老对象,说明缓存失效代码执行失败,代码存在错误,反之则说明我们代码是OK。 书写单元测试是一个良好编程习惯。...总结 本篇文章介绍了如何通过Spring Boot、Mybatis以及Redis快速搭建一个现代化Web项目,并且同时介绍了如何在Spring Boot下优雅书写单元测试来保证我们代码质量。

1K20

Spring缓存源码看大神编程思想

Spring缓存源码看大神编程思想 随着用户增长我们,数据库承受压力越来越大,此时我们就需要使用Spring缓存,减少用户操作直击数据库带来风险。...在使用Spring缓存时候我们通常会使用org.springframework.cache包下一些注解,但是这篇文章并不是介绍这几个注解使用方式,而是通过解读该包下源代码,透过代码看看Spring...initializeCaches 这是这个类初始化缓存方法: public void initializeCaches() { //实际存储缓存map private final...,初始化时先从loadCaches()方法加载以前缓存,经过处理将缓存key放进set中,将从redis取出缓存载入内存中。...来看看初始化方法中调用方法: loadCaches @Override protected Collection loadCaches() { List

68060

7min到40s:SpringBoot启动优化实践

至此基本可以断定,高耗时原因就是在初始化 Spring context,然而这个方法依然十分复杂,好在 refresh 方法也将初始化 Spring context 过程做了整理,并详细注释了各个步骤作用...该组件接入方式与上文描述接入方式类似,通过添加扫描服务根路径"com.xxx.ad.rediscache",注入对应 Bean 对象;查看该缓存组件项目的源码,发现该路径下有一个 config 类注入了一个缓存管理对象...CacheManager,其实现类是 RedisCacheManager: 缓存组件代码片段: 本次优化中,我是通过 每次删除一条扫描路径,启动服务后根据启动日志中 Bean 缺失错误信息,来逐个梳理...配置类,根据现有条件推断,尽可能为我们配置需要 Bean。...jar 中 spring.factotries 文件,将 XxxAdCacheConfiguration 配置类自动引入,而不需要扫描"com.xxx.ad.rediscache"整个路径了: #

22310

3 Springboot中使用redis,redis自动缓存异常处理

在上一篇中,提到了使用配置文件来定义连接信息,由于前面讲都是框架自动使用redis缓存数据,那么如果出现了异常又该怎么处理?...打开AbstractCacheInvoker类,看到里面有put,get,evict等方法,就是对应在repository注解,还有个无参构造方法里初始化了一个SimpleCacheErrorHandler...这个类就是处理redis缓存异常类,发现里面只是简单在异常时throw Exception,这也导致了如果redis异常,那么程序就会抛出异常,像query时,如果redis异常,那程序就不再往下进行...RuntimeException e, Cache cache) { } }; return cacheErrorHandler; } } 然后就可以在对应方法上加自己处理...再试一下save或者get操作,发现系统已经不报错了,进入了我们自定义errorHandler方法中。 下一篇继续探讨redis其他使用方法

1.9K40

Shiro 集成 Spring 之授权缓存

本章我们就来讲讲如何将 Shiro 中授权数据缓存到 Redis 中。 API Shiro 为授权数据缓存提供了两个借口,一个是 CacheManager,一个是 Cache。...return redisCache; } } 这里在 createCache() 方法中返回我们自定义 RedisCache 对象即可。...> Test 然后我们分别在 Realm doGetAuthorizationInfo 方法RedisCache get 方法中分别打印一条日志,看何时会访问数据库,何时会访问 Redis...缓存数据。...但使用这种缓存还有一个比较重要事情,就是当数据库中授权数据发生修改时,也要记得刷新缓存数据,不然会出现数据错乱,实现方式可以通过直接覆盖缓存,消息队列通知等方式,需要根据不同项目来选区不同方式,

63330

Spring 整合 Redis

-- spring自己缓存管理器,这里定义了缓存位置名称 ,即注解中value --> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager...注释介绍 @Cacheable 作用和配置<em>方法</em> @Cacheable <em>的</em>作用 主要针对<em>方法</em>配置,能够根据<em>方法</em><em>的</em>请求参数对其结果进行<em>缓存</em> @Cacheable 主要<em>的</em>参数 value <em>缓存</em><em>的</em>名称...@CachePut <em>的</em>作用 主要针对<em>方法</em>配置,能够根据<em>方法</em><em>的</em>请求参数对其结果进行<em>缓存</em>,和 @Cacheable 不同<em>的</em>是,它每次都会触发真实<em>方法</em><em>的</em>调用 @CachePut 主要<em>的</em>参数 value...////////////////////////////// @CacheEvict 作用和配置<em>方法</em> @CachEvict <em>的</em>作用 主要针对<em>方法</em>配置,能够根据一定<em>的</em>条件对<em>缓存</em>进行清空 @CacheEvict...主要<em>的</em>参数 value <em>缓存</em><em>的</em>名称,在 <em>spring</em> 配置文件中定义,必须指定至少一个例如: @CachEvict(value=”mycache”) 或者 @CachEvict(value={”

51520

7min到40s:SpringBoot启动优化实践

至此基本可以断定,高耗时原因就是在初始化 Spring context,然而这个方法依然十分复杂,好在 refresh 方法也将初始化 Spring context 过程做了整理,并详细注释了各个步骤作用...该组件接入方式与上文描述接入方式类似,通过添加扫描服务根路径"com.xxx.ad.rediscache",注入对应 Bean 对象;查看该缓存组件项目的源码,发现该路径下有一个 config 类注入了一个缓存管理对象...CacheManager,其实现类是 RedisCacheManager: 缓存组件代码片段: 本次优化中,我是通过 每次删除一条扫描路径,启动服务后根据启动日志中 Bean 缺失错误信息,来逐个梳理...配置类,根据现有条件推断,尽可能为我们配置需要 Bean。...3.2 使用 starter 机制,开箱即用了缓存失效原因后,就有解决办法了,因为是自己团队组件,就没必要通过 JavaConfig 显式手动导入方式改造,而是通过 SpringBoot

2.8K11

Spring Boot + Mybatis + Redis二级缓存开发指南

但是这还不够,一个现代化Web项目,肯定会上缓存加速我们数据库查询。接下来,将介绍如何科学将Redis集成到Mybatis二级缓存中,实现数据库查询自动缓存。...该接口共有以下五个方法: String getId():mybatis缓存操作对象标识符。一个mapper对应一个mybatis缓存操作对象。...需要注意是,这里不能通过autowire方式引用redisTemplate,因为RedisCache并不是Spring容器里bean。...这样在更新product信息时,能够自动失效缓存(本质上调用是clear方法)。...如果获取到老对象,说明缓存失效代码执行失败,代码存在错误,反之则说明我们代码是OK。 书写单元测试是一个良好编程习惯。

1.2K30

SpringBoot集成Redis实现缓存处理(Spring AOP技术)

学过Spring框架都知识,Spring框架难以避免需要配置不少XMl,而使用SpringBoot框架的话,就可以使用注解开发,极大地简化基于Spring框架开发。...SpringBoot充分利用了JavaConfig配置模式以及“约定优于配置”理念,能够极大简化基于SpringMVCWeb应用和REST服务开发。...基于这个,我们可以实现自定义元注解 我们设置RedisCache基于Method方法级别引用。...AOP实现监控所有被@RedisCache注解方法缓存 先从Redis里获取缓存,查询不到,就查询MySQL数据库,然后再保存到Redis缓存里,下次查询时直接调用Redis缓存 package org.muses.jeeplatform.cache...注解方法都会实现Redis缓存处理 ?

1.4K10

聊聊如何基于spring @Cacheable扩展实现缓存自动过期时间以及即将到期自动刷新

前言用过spring cache朋友应该会知道,Spring Cache默认是不支持在@Cacheable上添加过期时间,虽然可以通过配置缓存容器时统一指定。...:通过自定义派生@Cacheable注解第一种方法实现是简单,但缺点是语义不直观,因此得做好宣导以及wiki,不然对于新人来说,他可能都不知道cacheName用#分割是代表啥意思方法实现逻辑步骤如下...因此我们在缓存即将过期时主动刷新缓存,提高缓存命中率,进而提高性能。spring4.3@Cacheable提供了一个sync属性。...* @description: 标记了缓存注解方法类信息,用于主动刷新缓存时调用原始方法加载数据 */@Data@AllArgsConstructor@NoArgsConstructor@Builderpublic...在我看来,spring更多提供是一个通用规范和标准,如果定义缓存,本身不支持ttl,你在@Cacheable里面配置ttl就不合适了,有时候实现一个组件或者框架,考虑是不是能不能实现,而是有没有必要实现

5.3K30

扩展spring cache 支持缓存多租户及其自动过期

spring cache 概念 Spring 支持基于注释(annotation)缓存(cache)技术,它本质上不是一个具体缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用抽象...,通过在既有代码中添加少量它定义各种 annotation,即能够达到缓存方法返回对象效果。...默认spring cache 根据入参来区分 不能满足多租户系统设计需求,不能实现根据租户隔离。 区分缓存增加租户标识 ?...创建缓存方法,通过截取 value 中设置过期时间,赋值给你RedisCacheConfiguration public class RedisAutoCacheManager extends RedisCacheManager...cache 操作缓存时 获取到上步设置ttl 赋值给key @Override public void put(Object key, @Nullable Object value) {

1.6K10

玩转Spring Cache --- 扩展缓存注解支持失效时间TTL【享学Spring

Spring Cache抽象本省是并不支持Expire失效时间设定,我粗暴把它归为了Spring Cache抽象一个设计上bug,可参考文章:【小家Spring】玩转Spring Cache...、Redis等几乎所有第三方实现都支持) xxxCacheManager管理xxxCache必须扩展了Expire实现 因为缓存k-v键值对具有自动失效特性实在太重要和太实用了,所以虽然org.springframework.cache.Cache...它没有实现Expire,但好在第三方产品对Spring缓存标准实现时候,大都实现了这个重要失效策略,比如典型例子:RedisCache。...里配置为准 若多个方法里配置了同一个CacheName,TTL以第一个执行生成Cache方法配置为准 总之一个原则:TTL是和Cache绑定,且是在Cache在首次被初始化时候就被指定好了...另外关于Spring缓存其实还有一个重要知识点:缓存即将过期时主动刷新缓存: 因为缓存失效后,就会有一些请求会打到DB上,这段时间如果是高并发的话DB压力就很大(sync=true可以有一定缓解作用

8.5K91
领券