@Cacheable注解不支持配置过期时间,所有需要通过配置CacheManneg来配置默认的过期时间和针对每个类或者是方法进行缓存失效时间配置。
可以采用如下的配置信息来解决的设置失效时间问题
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
return new RedisCacheManager(
RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
this.getRedisCacheConfigurationWithTtl(30*60), // 默认策略,未配置的 key 会使用这个
this.getRedisCacheConfigurationMap() // 指定 key 策略
private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
//SsoCache和BasicDataCache进行过期时间配置
redisCacheConfigurationMap.put("SsoCache", this.getRedisCacheConfigurationWithTtl(24*60*60));
redisCacheConfigurationMap.put("BasicDataCache", this.getRedisCacheConfigurationWithTtl(30*60));
return redisCacheConfigurationMap;
private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
RedisSerializationContext
.SerializationPair
.fromSerializer(jackson2JsonRedisSerializer)
).entryTtl(Duration.ofSeconds(seconds));
return redisCacheConfiguration;
@Bean
public KeyGenerator wiselyKeyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append("." + method.getName());
if(params==null||params.length==0||params[0]==null){
return null;
String join = String.join("&", Arrays.stream(params).map(Object::toString).collect(Collectors.toList()));
String format = String.format("%s{%s}", sb.toString(), join);
//log.info("缓存key:" + format);
return format;
@CacheConfig(cacheNames = "SsoCache")
public class SsoCache{
@Cacheable(keyGenerator = "wiselyKeyGenerator")
public String getTokenByGsid(String gsid)
//二者选其一,可以使用value上的信息,来替换类上cacheNames的信息
@Cacheable(value = "BasicDataCache",keyGenerator = "wiselyKeyGenerator")
public String getTokenByGsid(String gsid)
原理解释 友情链接 手写redis@Cacheable注解参数java对象作为键值 @Cacheable注解作用,将带有该注解方法的返回值存放到redis的的中;使用方法在方法上使用@Cachea...
来自: 谢文峰的博客
@Cacheable注解不支持配置过期时间,所有需要通过配置CacheManneg来配置默认的过期时间和针对每个类或者是方法进行缓存失效时间配置。解决 可以采用如下的配置信息来解决的设置失效时...
来自: John_chu的博客
最近研究Spring+Redis缓存时,发现Cacheable注解在方法体上标注了之后虽然能够产生缓存,但是在redis中的缓存TIL是-1,接口返回的数据一直应用该缓存,导致缓存数据无法更新,网络上...
来自: libindashuaige的博客
redis配置redis:database:0host:localhostport:6379password:jedis:pool:max-active:8max-wait:-1max-idle:8m...
来自: u012724418的博客
Springboot中Redis缓存使用@Cacheable不生效的原因,以及@Cacheable的一些注意点1、有如下代码 //get方法调用了stockGive方法,stockGive方法使用了缓...
来自: 简简单单Onlinezuozuo
从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。SpringCache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方...
来自: Dreamhai
cacheNames和value指定缓存组件的名字,通过下面代码可以看出可以将返回结果放在哪个缓存中,可以通过数组的方式指定多个缓存 /** *Aliasfor{@link#cacheNames}. ...
来自: 初学者
开启缓存注解java类配置:@Configuration@EnableCachingpublicclassAppConfig{}@CacheConfig一个类中可能会有多个缓存操作,而这些缓存操作可能...
来自: 大鱼物联
1.application.properties中记得启用缓存spring.cache.type=redis2.缓存的对象必须实现Serializable3.SpringBootApplication...
来自: zhiguwo的博客
一、Cache缓存的作用随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一。Spring3开始提...
来自: 凯耐的博客
SpringCache两个需求缓存失效时间支持在方法的注解上指定SpringCache默认是不支持在@Cacheable上添加过期时间的,可以在配置缓存容器时统一指定:@BeanpublicCache...
来自: weixin_33976072的博客
Spring使用Cache从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。SpringCache是作用在方法上的,其核心思想是这样的:当我们在...
来自: weixin_30607659的博客
@Cacheable(value=“example#${select.cache.timeout:1000}”,key=“”)//example是cache容器名字#后边的是SpEL表达式...
来自: bean先森
最近想利用redis缓存做一个简陋版的类似腾讯新闻这样的查看新闻的网页。用了缓存以后,添加新闻缓存没有更新,想使用缓存的失效时间做到数据库缓存一致性。刚开始做的时候认为使用@CachePut注解会起到...
来自: 小气鬼Sweet的博客
我们要实现的是,当查询时,先从缓存中查找数据,当数据存在时,不查数据库,当数据不存在时,查找数据库,并将值存到redis中首先,缓存中是没有数据的,redis查询keys*,会发现redis中无数据此...
来自: sdzhangshulong的博客
缓存可以缓解数据库访问的压力,Spring自身不提供缓存的存储实现,需要借助第三方,比如JCache、EhCache、Hazelcast、Redis、Guava等。SpringBoot可以自动化配置合...
来自: 地表最强菜鸡的个人博客
前言之前我们使用过RedisTemplate来实现redis缓存,然后使用工具类来实现操作redis的存储。这样的方式好处是很自由,但是还不是最简单的处理方式。对于一些简单的应用来说,其实redis的...
来自: weixin_34320724的博客
1.开启缓存注解@EnableCaching@ConfigurationpublicclassRedisConfig{ @SuppressWarnings({"rawtypes",...
来自: DQchat的博客
也是在整合redis的时候偶然间发现spring-cache的。这也是一个不错的框架,与spring的事务使用类似,只要添加一些注解方法,就可以动态的去操作缓存了,减少代码的操作。如果这些注解不满足项...
来自: u011521890的专栏
问题描述SpringCache提供的@Cacheable注解不支持配置过期时间,还有缓存的自动刷新。我们可以通过配置CacheManneg来配置默认的过期时间和针对每个缓存容器(value)单独配置过...
来自: xiaolyuh123的专栏
一、过期时间: 详细配置说明请自行网上搜索。 timeToIdleSeconds表示最大空闲的时间,timeToLiveSeconds表示最大存活时间,(当为0时表示可以无限闲置或存活?此句好像存...
来自: shuixiou1的博客
spring3.1之后引进了cache,我们可以使用CacheManager、Cache以及相关缓存注解将缓存集成到系统中,但spring并没有提供配置缓存超时的机制,笔者结合spring的aspec...
来自: blackbeauty1024的专栏
业务层使用:@Cacheable(value="dictionary#1800",key="#root.targetClass.simpleName+':'+#root....
来自: zhy的博客
导语在之前的博客中分享了关于SpringBoot缓存的一些基本的概念,在这篇博客中提供一个小小的入门的实例,通过这个实例可以更好的了解关于SpringBoot缓存有关的知识点。 首先既然是缓存的使用...
来自: 初学者
一、问题描述Springboot整合shiro前,service里的@Cacheable、@Transactional等注解都正常使用。整合shiro之后,UserRealm类里自动注入的servic...
来自: 蝈蝈的博客
先看源码/** *Namesofthecachesinwhichmethodinvocationresultsarestored. *&lt;p&gt;Namesmaybeusedto...
来自: Freewind的技术专栏
@Cacheable(value=”accountCache”),这个注释的意思是,当调用这个方法的时候,会从一个名叫accountCache的缓存中查询,如果没有,则执行实际的方法(即查询数据库),...
来自: dadadayong的专栏
SpringBoot使用Redis做缓存,@Cacheable、@CachePut、@CacheEvict等注解的使用导入依赖&lt;dependency&gt;&lt;gro...
来自: litte_frog的博客
Spring定义了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口来统一不同的缓存技术,而SpringB...
来自: 胡小海丶
在Spring中通过获取MemCachedClient来实现与memcached服务器进行数据读取的方式。不过,在实际开发中,我们往往是通过Spring的@Cacheable来实现数据的缓存的,所以,...
来自: 胡金水的博客
SpringCacheSpringCache使用方法与Spring对事务管理的配置相似。SpringCache的核心就是对某个方法进行缓存,其实质就是缓存该方法的返回结果,并把方法参数和结果用键值对的...
来自: 茶爸爸(微信:benyzhous) 的专栏
转载请标明出处:http://blog.csdn.net/forezp/article/details/71023614本文出自方志朋的博客本文介绍如何在springboot中使用默认的springc...
来自: 晓风的博客
maven项目中在pom.xml中依赖2个jar包:redis.clientsjedis2.8.1 org.springframework.data spring-data-redis 1.7.2....
来自: 期待破茧成蝶
从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。SpringCache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方...
来自: s20082043的专栏
最近发现线上监控有个SQL调用量很大,但是方法的调用量不是很大,查看接口实现,发现接口是做了缓存操作的,使用Springcache缓存注解结合tair实现缓存操作。但是为啥SQL调用量这么大,难道缓存...
来自: chengbinbbs的专栏
SpringCache本身完美支持缓存的CRUD.可以通过注解来实现缓存的清理,详见: org.springframework.cache.annotation.CacheEvict.此处不赘述. ...
来自: tiancen2001的专栏
xml里的配置: <bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager" /> 缓存内容:
如果你只是想使用一个轻量级的缓存方案,那么可以尝试使用Springcache方案。那么在使用spring@Cacheable注解的时候,要注意,如果类A的方法f()被标注了@Cacheable注解,那...
来自: Sam哥哥聊技术
使用springboot版本1.5.9 使用redis作为缓存。 问题表现:个别类使用缓存注解(@CacheConfig等)可以正常使用。有些类使用,竟然不起作用。总体表现就是,时灵时不灵。不报任何错...
来自: 清水茶叶
在学Spring的缓存使用。服务器上安装的redis。 然后在service层中使用@Cacheable 注解后,方法体中的查询就不执行了。 写的是一部分接口,需要有返回参数跟信息,数据,所以封装成了
缓存可以缓解数据库访问的压力,Spring自身不提供缓存的存储实现,需要借助第三方,比如JCache、EhCache、Hazelcast、Redis、Guava等。SpringBoot可以自动化配置合...
来自: Fish Where The Fish Are
昨天碰到Cache无效的问题,现在已经找到原因并且解决。把知识分享给大家,免得以后踩坑。@Cacheable标注的方法,如果其所在的类实现了某一个接口,那么该方法也必须出现在接口里面,否则cache无...
来自: 永无止境,上下求索
最近会员中心拼团中一个查询接口做了缓存,使用到springcache框架。在用户状态变更的时候,清除用户的缓存cache。但是实际结果是数据库状态变了,但是缓存状态并没有清除,结果出现缓存不一致的问题...
来自: chengbinbbs的专栏
准备工作使用springboot搭建简单的项目引入redis的包compile('org.springframework.boot:spring-boot-starter-data-redis')配置...
来自: 技术笔记
@Cacheable可以自动生成缓存,一次在开发中使用使用该注解,本来以为重启后缓存就消失了,可以重启后,原来缓存的值还在,后来查找redis,发现缓存到redis中,如果我们不想持久化,仅仅缓存到内...
来自: Emine
qq_38500871:[reply]zyt807[/reply]
好的。谢谢,我这使用的是spring boot 1.5.3的。这个类RedisCacheConfiguration,不是public的,是默认的,其他包无法使用
SpringBoot2.0的@Ca...
zyt807:[reply]qq_38500871[/reply]
org.springframework.data.redis.cache ps:建议使用idea开发工具,对于缺失的类都会有提示
SpringBoot2.0的@Ca...
qq_38500871:这个RedisCacheConfiguration是自建的类,还是导入的啊。什么包的,需要引入什么依赖啊?
SpringBoot2.0的@Ca...
weixin_38297879:[reply]zyt807[/reply]
找到下面的文章:https://segmentfault.com/q/1010000015203664/a-1020000015209787
SpringBoot2.0的@Ca...
zyt807:[reply]weixin_38297879[/reply]
redisCacheConfigurationMap.put("SsoCache", this.getRedisCacheConfigurationWithTtl(24*60*60));
redisCacheConfigurationMap.put("BasicDataCache", this.getRedisCacheConfigurationWithTtl(30*60));
这样来实现