SpringCache使用配置

2023-12-14 11:04
文章标签 配置 使用 springcache

本文主要是介绍SpringCache使用配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目中引入SpringCache

  1. pom文件引入依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    
  2. 配置文件指定缓存类型

    spring:cache:type: redis
    
  3. 启动类开启缓存注解@EnableCaching

springEl表达式

  • methodName:当前被调用的方法名

    • #root.methodName
  • args:当前被调用的方法的参数列表

    • #root.args[0]
  • result:方法执行后的返回值

    • #result

注解使用

  • Cacheable注解

    • 标记在一个方法上,也可以标记在一个类上
    • 缓存标注对象的返回结果,标注在方法上缓存该方法的返回值,标注在类上缓存该类所有的方法返回值
    • value:缓存名称,可以有多个
    • key:缓存的key规则,可以用springEL表达式,默认是方法的参数组合
    • condition:缓存条件,使用springEL编写,返回true才缓存
    @Cacheable(value = "user:page",key = "#pageNum+'_'+#pageSize")
    public Map<String, Object> page(Integer pageNum, Integer pageSize) {Map<String,Object> map = new HashMap<>();Page<User> page = new Page<>(pageNum,pageSize);Page<User> listPage = this.userMapper.selectPage(page, null);map.put("totalRecord",listPage.getTotal());map.put("totalPage",listPage.getPages());map.put("list",listPage.getRecords());return map;
    }
    
  • CachePut注解:更新缓存

    @CachePut(value = "user", key = "#user.id")
    public User update(User user) {this.userMapper.updateById(user);return this.userMapper.selectById(user.getId());
    }
    
  • CacheEvict注解:删除缓存

    • beforeInvocation = true:缓存清除是否在方法之前执行,默认false
    @CacheEvict(value = "user", key = "#id", beforeInvocation = true)
    public boolean delete(Integer id) {int i = 1 / 0;return this.userMapper.deleteById(id) > 0;
    }
    
  • Caching

    • 组合多个Cache注解使用
    • 允许在同一方法上使用多个嵌套的@Cacheable、@CachePut、@CacheEvict注解
    @Caching(cacheable = {@Cacheable(value = "user1", key = "#user.id")},put = {@CachePut(value = "user2", key = "#user.id")})
    public User update(User user) {this.userMapper.updateById(user);return this.userMapper.selectById(user.getId());
    }
    

SpringCache框架自定义cacheManager配置过期时间

  • 配置类

    /*** 过期时间1h** @param redisConnectionFactory* @return*/
    @Bean
    public RedisCacheManager redisCacheManager1Hour(RedisConnectionFactory redisConnectionFactory) {ObjectMapper objectMapper = new ObjectMapper();objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);objectMapper.registerModule(new JavaTimeModule());objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false);// 只缓存非空值objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);// 将类型序列化到属性json字符串中objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(configuration).transactionAware().build();
    }
    
  • Service类使用

    @Cacheable(value = "user:page",key = "#pageNum+'_'+#pageSize", cacheManager = "redisCacheManager1Hour")
    public Map<String, Object> page(Integer pageNum, Integer pageSize) {Map<String,Object> map = new HashMap<>();Page<User> page = new Page<>(pageNum,pageSize);Page<User> listPage = this.userMapper.selectPage(page, null);map.put("totalRecord",listPage.getTotal());map.put("totalPage",listPage.getPages());map.put("list",listPage.getRecords());return map;
    }
    

SpringCache框架自定义keyGenerator

  • key规则定义配置类

    /*** 自定义缓存key规则** @return*/
    @Bean
    public KeyGenerator keyGenerator() {return (obj, method, args) -> obj.getClass().getSimpleName() + "_" + method.getName() + "_" + StringUtils.arrayToDelimitedString(args, "_");
    }
    
  • Service类使用,key和keyGenerator只能二选一

    @Cacheable(value = "user:page", keyGenerator = "keyGenerator")
    public Map<String, Object> page(Integer pageNum, Integer pageSize) {Map<String, Object> map = new HashMap<>();Page<User> page = new Page<>(pageNum, pageSize);Page<User> listPage = this.userMapper.selectPage(page, null);map.put("totalRecord", listPage.getTotal());map.put("totalPage", listPage.getPages());map.put("list", listPage.getRecords());return map;
    }
    

这篇关于SpringCache使用配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/492274

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于