1,在启动类Application中增加注解@EnableCaching

2,待缓存的方法上方增加@Cacheable注解

@Cacheable(cacheNames = redisContains.REDIS_SHOW_TEXT,key = "#bodyParams.getString('textCode')")

这其中,key即接收参数中的某个数据,例如:

若方法的接收参数为JSONObject bodyParams   则key的值可以写为key = "#bodyParams.getString('textCode')"。

若接收参数为:SysDictData dictData 则key的值可以写为:key = "#dictData.beginTime"

若接收参数为:String id  则key的值可以写为:key="#id"

3,目前是无法设置过期时间的

期望能达到此效果,设置#30,可以设置30秒过期时间,方式如下:

3.1,创建RedisConfigCacheManager类

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.cache.*;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;import java.time.Duration;/*** redis 配置类*/
@Slf4j
public class RedisConfigCacheManager extends RedisCacheManager {public RedisConfigCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {super(cacheWriter, defaultCacheConfiguration);}private static final RedisSerializationContext.SerializationPair<Object> DEFAULT_PAIR = RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer());private static final CacheKeyPrefix DEFAULT_CACHE_KEY_PREFIX = cacheName -> cacheName+":";@Overrideprotected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfig) {final int lastIndexOf = StringUtils.lastIndexOf(name, '#');if (lastIndexOf > -1) {final String ttl = StringUtils.substring(name, lastIndexOf + 1);final Duration duration = Duration.ofSeconds(Long.parseLong(ttl));cacheConfig = cacheConfig.entryTtl(duration);//修改缓存key和value值的序列化方式cacheConfig = cacheConfig.computePrefixWith(DEFAULT_CACHE_KEY_PREFIX).serializeValuesWith(DEFAULT_PAIR);final String cacheName = StringUtils.substring(name, 0, lastIndexOf);return super.createRedisCache(cacheName, cacheConfig);}else{//修改缓存key和value值的序列化方式cacheConfig = cacheConfig.computePrefixWith(DEFAULT_CACHE_KEY_PREFIX).serializeValuesWith(DEFAULT_PAIR);return super.createRedisCache(name, cacheConfig);}}}

3.2,创建CacheConfig类

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;@Configuration
public class CacheConfig {@Beanpublic CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {ObjectMapper om = new ObjectMapper();RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);// 解决查询缓存转换异常的问题om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);// 配置序列化(解决乱码的问题)RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMillis(-1)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);return new RedisConfigCacheManager(cacheWriter, config);}}

至此,即可实现,加上#30可以实现30秒缓存,不加#即-1不限时间缓存。

参考:https://www.cnblogs.com/mrsans/articles/14113591.html

springboot缓存@Cacheable的使用,及设置过期时间相关推荐

  1. spring缓存注解@Cacheable和@CacheEvict,设置过期时间和批量模糊删除

    spring缓存注解@Cacheable和@CacheEvict,设置过期时间和批量模糊删除 配置 CacheManager 类 key前缀配置 RedisCache配置 RedisCache 模糊匹 ...

  2. javascript本地缓存方案-- 存储对象和设置过期时间

    cz-storage 解决问题 1. 前端js使用localStorage的时候只能存字符串,不能存储对象 cz-storage 可以存储 object undefined number string ...

  3. @cacheable 设置过期时间_缓存面试三连击——聊聊Redis过期策略?内存淘汰机制?再手写一个LRU 吧!...

    大家好,今天我和大家想聊一聊有关redis的过期策略的话题. 听到这里你也许会觉得:"我去,我只是个日常搬砖的,这种偏底层的知识点,我需要care吗?" 话虽如此·,但是兄die, ...

  4. 优雅的缓存解决方案--设置过期时间

    1. 前言 上篇文章介绍了利用 SpringCache 和 Redis 设置缓存,但是SpringCache 注解并不支持设置缓存时间,确实很令人头疼.这篇文章将叫你用最简单的方式解决 SpringC ...

  5. redis缓存失效时间设为多少_java操作Redis缓存设置过期时间的方法

    关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...

  6. Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内

    1.基础说明 当redis设置内存使用限制后,当达到内存限制时,Redis将尝试删除key(控制节点的最大使用内存) redis.conf中配置项maxmemory <bytes>或者控制 ...

  7. 可以设置过期时间的Java缓存Map

    前言 最近项目需求需要一个类似于redis可以设置过期时间的K,V存储方式.项目前期暂时不引进redis,暂时用java内存代替. 解决方案 1. ExpiringMap 功能简介 : 1.可设置Ma ...

  8. 如何用java操作Redis缓存设置过期时间

    如何用java操作Redis缓存设置过期时间?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获. 在应用中我们会需要使用red ...

  9. c# redis 如何设置过期时间_Spring cache整合Redis,并给它一个过期时间!

    小Hub领读: 不知道你们有没给cache设置过过期时间,来试试? 上一篇文章中,我们使用springboot集成了redis,并使用RedisTemplate来操作缓存数据,可以灵活使用. 我才懂! ...

最新文章

  1. 硅谷精英的薪水大揭秘,你和他们差距有多大?
  2. java中怎么固定间距_java中的GridBagLayout是怎么调组件间距的...
  3. 【upc5020】 Knight
  4. ansible安装部署_运维日记|使用ansible批量部署crontab定时删归档任务
  5. jarjar.jar解决jar包版本兼容问题
  6. 用代码判断当前系统是否支持某个版本的feature
  7. 23种设计模式详解_太厉害了,清华大牛一个坦克项目就把23种设计模式给抽丝剥茧了...
  8. React-引领未来的用户界面开发框架-读书笔记(六)
  9. java l1 l2缓存,Java 两级缓存框架
  10. new hashmap 初始大小_你们要的HashMap工作原理!它来了!!!
  11. MATLAB: 你不知道的12个基础知识
  12. android 点击屏幕 回调,Android 点击回调传递
  13. 林锐的《高质量编程》学习笔记——内存分配方式
  14. 聊聊量子计算机那些事
  15. 图片转字符画-----做出酷炫的头像
  16. Ubuntu 压缩多个vmdk文件
  17. 大白话讲调度:非支配遗传算法与柔性作业车间调度
  18. win10html网页运行空白,win10系统Ie浏览器无法打开HTML格式的网页文件的处理秒方...
  19. docker部署的mysql调整宿主机映射端口
  20. 深度学习常见名词概念:Sota、Benchmark、Baseline、端到端模型、迁移学习等的定义

热门文章

  1. 位图索引Bitmap indexes(数据库索引)
  2. php socket链接不上,客户端websocket 无法连接上PHP socket有关问题
  3. MATLAB plot绘图参数解析
  4. spring-security验证登录https变成http导致登录跳转失败
  5. VLAD算法浅析, BOF、FV比较
  6. css元素转换(旋转函数、rotateX 和 rotateY 的使用、移动函数、缩放函数、过渡、动画)详解
  7. Linux:笔记本双硬盘、双系统
  8. 高考冲刺家长减压:做后盾,率先行
  9. AutoRun.inf 文件详解
  10. 想要提高网站关键词排名需要注意什么?