【SpringBoot】SpringCache轻松启用Redis缓存

目录:

1.前言

2.常用注解

3.启用缓存

1.前言

Spring Cache是Spring提供的一种缓存抽象机制,旨在通过简化缓存操作来提高系统性能和响应速度。Spring Cache可以将方法的返回值缓存起来,当下次调用方法时如果从缓存中查询到了数据,可以直接从缓存中获取结果,而无需再次执行方法体中的代码

2.常用注解

  • @Cacheable:在方法执行前查看是否有缓存对应的数据,如果有直接返回数据,如果没有调用方法获取数据返回,并缓存起来;
  • @CacheEvict:将一条或多条数据从缓存中删除;
  • @CachePut:将方法的返回值放到缓存中;
  • @EnableCaching:开启缓存注解功能;
  • @Caching:组合多个缓存注解。

3.启用缓存

3.1.配置yaml文件

spring:  
  cache:  
    type: simple  
    simple:  
      time-to-live: 600s

3.2.添加注解

在启动类上添加注解@EnableCaching

@Slf4j
@SpringBootApplication
@EnableCaching
public class SpringBootstrap {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootstrap.class, args);
    }

}

3.3.创建缓存

使用@CachePut注解。当方法执行完后,如果缓存不存在则创建缓存;如果缓存存在则更新缓存。

注解中的value属性可指定缓存的名称,key属性则可指定缓存的键,可使用SpEL表达式来获取key的值。

这里result表示方法的返回值UserInfo,从UserInfo中获取id属性。

@CachePut(value = "user", key = "#result.id")
public UserInfo create(UserCreateRequest request) {
    // 将请求中的数据映射给实体类(相关方法自行创建)
    User user = UserConverter.createByRequest(request);
    boolean save = userService.save(user);
    if (save) {
        return UserConverter.toInfo(user);
    } else {
        throw new RuntimeException("User.create.fail");
    }
}

3.4.更新缓存

同样使用@CachePut注解。当方法执行完后,如果缓存不存在则创建缓存;如果缓存存在则更新缓存。

@CachePut(value = "user", key = "#result.id")
public UserInfo update(UserUpdateRequest request) {
    // 将请求中的数据映映射给wrapper(相关方法自行创建)
    Wrapper<User> wrapper = UserConverter.updateWrapperByRequest(request);
    boolean update = userService.update(wrapper);
    if (update) {
        return UserConverter.toInfo(user);
    } else {
        throw new RuntimeException("User.update.fail");
    }
}

3.5.查询缓存

使用@Cacheable注解。在方法执行前,首先会查询缓存,如果缓存不存在,则根据方法的返回结果创建缓存;如果缓存存在,则直接返回数据,不执行方法。

这里使用request表示方法的参数UserQueryRequest。

@Cacheable(value = "user", key = "#request.id")
public UserInfo query(UserQueryRequest request) {
    User user = userService.getById(request.getId());
    if (Objects.isNull(user)) {
        throw new RuntimeException("User.not.exist");
    }
    return c2cInterestCategory;
}

3.6.删除缓存

使用@CacheEvict注解。当方法执行完后,会根据key删除对应的缓存。

这里可以使用condition属性,当返回结果为true(删除成功)后,才去删除缓存。

@CacheEvict(value = "user", key = "#request.id", condition = "#result.equals(true)")
public Boolean delete(UserDeleteRequest request) {
    return userService.removeById(request.getId());
}

3.7.多重操作

使用@Caching注解,通过使用不同的属性进行相应操作。

创建/更新多个缓存:

@Caching(
            put = {
                    @CachePut(value = "userById", key = "#result.id"),
                    @CachePut(value = "userByPhone", key = "#request.phone")
            }
    )

删除多个缓存:

@Caching(
            evict = {
                    @CacheEvict(value = "userById", key = "#result.id"),
                    @CacheEvict(value = "userByPhone", key = "#request.phone")
            }
    )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/800546.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python如何判断变量是否可迭代

python如何判断变量是否可迭代&#xff1f;方法如下&#xff1a; 方法一&#xff1a; 适用于python2和python3 >>> from collections import Iterable >>> isinstance("str", Iterable) True 方法二&#xff1a; 适用于python3 s "hello …

仿RabbitMQ消息队列

项目介绍 介绍 本项目已上传&#xff0c;后期会做扩展&#xff1a;Gitee获取完整项目源码 该项目是仿照RabitMQ实现简版的消息队列。主要是解决了普通生产消费者模型只能在单主机上生产消费模型的缺点。该项目是可以进行跨网络传输生产与消费&#xff0c;实现不同主机间的数…

C语言中的指针:掌握内存的钥匙

C语言中的指针&#xff1a;掌握内存的钥匙 引言 C语言是一种结构化编程语言&#xff0c;它提供了对硬件底层的直接访问&#xff0c;其中最强大的特性之一就是指针。指针允许程序员直接操作内存地址&#xff0c;这对于理解程序的内部工作原理以及优化代码性能至关重要。本文将深…

【linux】服务器ubuntu安装cuda11.0、cuDNN教程,简单易懂,包教包会

【linux】服务器ubuntu安装cuda11.0、cuDNN教程&#xff0c;简单易懂&#xff0c;包教包会 【创作不易&#xff0c;求点赞关注收藏】 文章目录 【linux】服务器ubuntu安装cuda11.0、cuDNN教程&#xff0c;简单易懂&#xff0c;包教包会一、版本情况介绍二、安装cuda1、到官网…

elasticsearch 查询超10000的解决方案

前言 默认情况下&#xff0c;Elasticsearch集群中每个分片的搜索结果数量限制为10000。这是为了避免潜在的性能问题。 但是我们 在实际工作过程中时常会遇到 需要深度分页&#xff0c;以及查询批量数据更新的情况 问题&#xff1a;当请求form size >10000 时&#xff0c…

基于多元数据融合的喜马拉雅淡色花岗岩识别

一.基于单一数据源的识别 1.基于物理数据 不同岩层&#xff0c;在密度、弹性、导电性、磁性、放射性等物理属性上有差异&#xff0c;因此能够识别 2.基于化学数据 不同岩体&#xff0c;形成于不同条件&#xff0c;元素组合因此不同&#xff0c;因此能够识别 3.基于遥感数据 …

第一节Linux常见指令

目录 1.Linux下基本指令 ls指令 pwd 命令 cd 指令 知识点:理解树形结构 touch 指令 mkdir指令(重要) rmdir指令 && rm指令(重要) 知识点:ls file* 可以找到当前目录下任何以file开头的文件​编辑 知识点:热键 man指令()重要 补充知识点:nano cp…

PyTorch垃圾分类任务与垃圾图片数据集

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 人工智能用于垃圾分类 人工智能用于垃圾分类&#xff0c;业界早有过相关的讨论&#xff0c;主要有三种方案&#xff1a;第一种方案&#xff0c;把垃圾的相关信息制成表格化数据&#xff0c;然后用传统的机器学习方法实现分…

C++ //练习 15.15 定义你自己的Disc_quote和Bulk_quote。

C Primer&#xff08;第5版&#xff09; 练习 15.15 练习 15.15 定义你自己的Disc_quote和Bulk_quote。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /******************************************************************…

JavaSE——集合框架二(5/6)-Map系列集合:HashMap、LinkHashMap、TreeMap原理

目录 HashMap集合的底层原理 LinkHashMap的底层原理 TreeMap的底层原理 HashMap集合的底层原理 HashMap的特点 HashMap&#xff08;由键决定特点&#xff09;&#xff1a;无序、不重复、无索引;&#xff08;用的最多&#xff09; HashMap的底层原理 HashMap跟HashSet的底…

如何搭建App自动化测试框架?

前言 Appium是一个开源的自动化测试框架&#xff0c;支持跨平台&#xff0c;支持多种编程语言&#xff0c;可用于原生&#xff0c;混合和移动web应用程序&#xff0c;使用webdriver驱动ios&#xff0c;android应用程序、那么为了学习app自动化测试首要任务肯定就是搭建测试开发…

scratch数学计算 2024年6月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch数学计算 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、p…

shell脚本-linux如何在脚本中远程到一台linux机器并执行命令

需求&#xff1a;我们需要从11.0.1.17远程到11.0.1.16上执行命令 实现&#xff1a; 1.让11.0.1.17 可以免密登录到11.0.1.16 [rootlocalhost ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created d…

【密码学】密码学数学基础:剩余系

不得不啃的密码学数学基础之剩余系是个啥&#xff1f;数学里面有好多的定义都有前置的数学概念&#xff0c;要想弄懂剩余系还得先说说“同余”。 一、同余 那么“同余”有是个什么呢&#xff1f;在谈论“同余”之前&#xff0c;我们先圈定个讨论的范围。接下来讨论的都是整数集…

linux基本指令的学习

文章目录 ls指令pwd指令小知识 cd 指令小知识 touch 指令mkdir指令rm指令小知识 man指令cp指令mv指令cat&#xff0c;more&#xff0c;less指令小知识 (echo)head 和 tail指令小知识 &#xff08;管道&#xff09; date指令小知识 &#xff08;时间戳&#xff09; find指令小知…

STM32(五):STM32指南者-按键控制灯开关实验

说明&#xff1a;源代码和教程可从野火处下载&#xff0c;本博客为了记录学习过程STM32&#xff08;四&#xff09;&#xff1a;STM32指南者-跑马灯实验的基础上 一、采用轮询方式1、bsp_key.h2、bsp_key.c3、main.c 二、采用中断方式1、bsp_exti.h2、bsp_exti.c3、stm32f10x_i…

ARM架构(一)—— ARMV8V9基础概念

目录 1.ARMCore的时间线2.ARM术语小结2.1 A64和arrch642.2ARM架构现在的5个系列2.3 微架构2.4 PE2.5 Banked2.6 ARM文档术语2.7 IMPLEMENTATION DEFINFD 和 DEPRECATED2.8 EL1t和EL1h 3 ARMv7的软件架构4 安全状态切换模型4.1 Secure state和Non-secure state介绍 5 Interproce…

鸿蒙模拟器(HarmonyOS Emulator)Beta申请审核流程

文 | Promise Sun 一.背景&#xff1a; 鸿蒙项目开发需要使用模拟器进行开发测试&#xff0c;但目前想在DevEco Studio开发工具中使用模拟器就必须到华为官网进行报名申请&#xff0c;参加“鸿蒙模拟器&#xff08;HarmonyOS Emulator&#xff09;Beta活动申请”。 申请审核通…

cleanshot Mac 上的截图工具

笔者闲来无事&#xff0c;最近在找一些mac上好用的工具其中一款就是cleanShot。为什么不用原有的mac自带的呢。因为相对来说编辑功能不算全面&#xff0c;不支持长截图。那有没有一款软件支持关于截图的好用工具呢。 所以笔者找了这款。安装包是直接安装就可使用的。请大家点赞…

AI算法17-贝叶斯岭回归算法Bayesian Ridge Regression | BRR

贝叶斯岭回归算法简介 贝叶斯岭回归&#xff08;Bayesian Ridge Regression&#xff09;是一种回归分析方法&#xff0c;它结合了岭回归&#xff08;Ridge Regression&#xff09;的正则化特性和贝叶斯统计的推断能力。这种方法在处理具有大量特征的数据集时特别有用&#xff…