Spring Cache 介绍及使用方法

news2024/11/17 0:24:57

目录

一、Spring Cache介绍

1、Spring Cache常用注解

二、Spring Cache使用redis缓存步骤

1、添加依赖

2、添加配置

3、使用注解


一、Spring Cache介绍

Spring cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存

功能。Spring Cache提供了一层抽象,底层可以切换不同的cache实现。具体就是CacheManager

接口来统一不同的缓存技术。

CacheManager是Spring提供的各种缓存技术抽象接口。

针对不同的缓存技术需要实现不同的CacheManager:
 

CacheManager描述
EhcachecacheManager使用EhCache作为缓存技术
GuavaCacheManager使用Google的GuavaCache作为缓存技术
RedisCacheManager使用Redis作为缓存技术

1、Spring Cache常用注解

注解说明
@EnableCaching开启缓存注解功能
@Cacheable在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据若没有数据,调用方法并将方法返回值放到缓存中
@CachePut将方法的返回值放到缓存中
@CacheEvict将一条或多条数据从缓存中删除

在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用

@EnableCaching开启缓存支持即可。

例如,使用Redis作为缓存技术,只需要导入Spring data Redis的maven坐标即可。

二、Spring Cache使用redis缓存步骤

1、添加依赖

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2、添加配置

spring
  redis:
    host: 172.17.2.94  #ip地址
    port: 6379         #端口
    password: root@123456  #redis密码
    database: 0        #指定数据库
  cache:
    redis:
      time-to-live: 1800000 #设置缓存过期时间,可选

3、使用注解

启动类加注解:@EnableCaching

@Slf4j
@SpringBootApplication
@EnableCaching
public class CacheDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(CacheDemoApplication.class,args);
        log.info("项目启动成功...");
    }
}

注解 @CachePut:将方法返回值放入缓存

    /**
     * CachePut:将方法返回值放入缓存
     * value:缓存的名称,每个缓存名称下面可以有多个key
     * key:缓存的key
     */
    //@CachePut(value = "userCache",key = "#result.id")//result带表返回值
    @CachePut(value = "userCache",key = "#user.id")//可以直接获取参数,参数名要保持一致
    @PostMapping
    public User save(User user){
        userService.save(user);
        return user;
    }

key支持Spring的表达式语言,可以动态计算key值,通过#来获取,通常使用直接#+参数

result:表示返回值,可以通过获取返回值获取key



 

注解 @CacheEvict:清理指定缓存

    /**
     * CacheEvict:清理指定缓存
     * value:缓存的名称,每个缓存名称下面可以有多个key
     * key:缓存的key
     */
    @CacheEvict(value = "userCache",key = "#p0")//p固定写法,0表示下表,第一个参数
    //@CacheEvict(value = "userCache",key = "#root.args[0]")//固定写法,0表示下表,第一个参数
    //@CacheEvict(value = "userCache",key = "#id")//直接获取参数
    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id){
        userService.removeById(id);
    }
    //@CacheEvict(value = "userCache",key = "#p0.id")//p0第一个参数,id参数的属性
    //@CacheEvict(value = "userCache",key = "#user.id")//直接获取参数属性
    //@CacheEvict(value = "userCache",key = "#root.args[0].id")//获取第一个参数,id参数的属性
    @CacheEvict(value = "userCache",key = "#result.id")//从返回值获取
    @PutMapping
    public User update(User user){
        userService.updateById(user);
        return user;
    }

注解 @Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据若没有数据,调用方法并将方法返回值放到缓存中

/**
     * Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
     * value:缓存的名称,每个缓存名称下面可以有多个key
     * key:缓存的key
     * condition:条件,满足条件时才缓存数据
     * unless:满足条件则不缓存
     */
    @Cacheable(value = "userCache",key = "#id",unless = "#result == null")
    @GetMapping("/{id}")
    public User getById(@PathVariable Long id){
        User user = userService.getById(id);
        return user;
    }

    @Cacheable(value = "userCache",key = "#user.id + '_' + #user.name")//动态拼接key
    @GetMapping("/list")
    public List<User> list(User user){
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(user.getId() != null,User::getId,user.getId());
        queryWrapper.eq(user.getName() != null,User::getName,user.getName());
        List<User> list = userService.list(queryWrapper);
        return list;
    }

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云EMR集群搭建及使用

目录 1.简介 1.什么是EMR 2.组成 3.与自建hadoop集群对比 4.产品架构 2.使用 1.创建EMR集群 1.登录EMR on ECS控制台 2.软件设置 3.硬件设置 3.基础配置 2.配置 1.组件配置 2.用户管理 3.安全组 4.Gateway 3.组件UI 1.简介 1.什么是EMR EMR是运行在阿里云平台…

国际安全领域顶会NDSS 2023录稿整理 (上)

隐私计算研习社 NDSS是网络和系统安全领域的四大顶级国际学术会议&#xff08;BIG4&#xff09;之一&#xff0c;第三十届会议于2023年2月27日到3月3日&#xff0c;在美国圣迭戈举办。本文将分上下两部分整理会议录取的94篇论文&#xff0c;并对论文进行分类&#xff0c;感兴趣…

【数据库概论】第七章 数据库设计

第七章 数据库设计 7.1 概述 1.数据库设计的基本步骤 数据库设计可以分为以下六个阶段 需求分析阶段 准别了解和分析用户的需求&#xff08;包括数据与处理&#xff09;。需求分析是整个设计过程的基础&#xff0c;觉定了在其上构建数据库的速度和质量。需求分析做不好可能会…

TwinCAT 3 ADS Monitor使用

TwinCAT 3 ADS Monitor使用 《20211022 TwinCAT ADS Monitor的使用方法》 《TwinCAT3.1从入门到精通》 TF6010 | TwinCAT 3 ADS Monitor 以上是基础知识&#xff0c;下面是实操 先在Instance中查看变量的偏移量&#xff0c;即地址 多变量读写测试 结果如下&#xff0c;4条指令…

GPC爬虫池有什么用?

GPC爬虫池有什么用&#xff1f; 答案是&#xff1a;100%提高外贸网站在Google搜索引擎的收录量。 众所周知&#xff0c;要想免费从谷歌搜索引擎获取流量&#xff0c;就好做好谷歌SEO。 一个网站是否能获取谷歌的认可&#xff0c;有一个重要的技术指标&#xff0c;就是这个网…

R语言基础(一):注释、变量

R语言用于统计分析和绘制图表等操作。不同于Java等其它语言&#xff0c;R用于统计&#xff0c;而不是做一个网站或者软件&#xff0c;所以R的一些开发习惯和其它语言不同。如果你是一个编程小白&#xff0c;那么可以放心大胆的学。如果你是一个有编程基础的人&#xff0c;那么需…

数字化时代,你应该知道的BI

我曾经看到有人在讨论过商业智能BI的部署对于企业是否有实际意义&#xff0c;现在市场的数据已经证明商业智能BI在商业世界中&#xff0c;在企业的实践中证明了自己的价值&#xff0c;得到了广泛的认可。 一、什么是BI 有一点可能很多人没有想到&#xff0c;实际上商业智能BI…

CorelDRAW2023详解新增七大功能 ,CorelDRAW2023最新版本更新怎么样?

CorelDRAW2023新功能有哪些&#xff1f;CorelDRAW2023最新版本更新怎么样&#xff1f;让我们带您详细了解&#xff01; CorelDRAW Graphics Suite 2023是矢量制图行业的标杆软件&#xff0c;2023年全新版本为您带来多项新功能和优化改进。本次更新强调易用性&#xff0c;包括更…

如何使用vue创建一个完整的前端项目

搭建Vue项目的完整流程可以分为以下几个步骤&#xff1a;安装Node.js和npm&#xff1a;Vue.js是基于Node.js开发的&#xff0c;因此在开始搭建Vue项目之前&#xff0c;需要先安装Node.js和npm&#xff08;Node.js的包管理器&#xff09;。可以从官网下载Node.js安装包并安装。安…

数据的存储--->【大小端字节序】(Big Endian)(Little Endian)

⛩️博主主页&#xff1a;威化小餅干&#x1f4dd;系列专栏&#xff1a;【C语言】藏宝图&#x1f38f; ✨绳锯⽊断&#xff0c;⽔滴⽯穿&#xff01;一个编程爱好者的学习记录!✨前言计算机硬件有两种存储数据的方式&#xff1a;大端字节序——Big Endian小端字节序——Little …

【Android -- 开源库】表格 SmartTable 的基本使用

介绍 1. 功能 快速配置自动生成表格&#xff1b;自动计算表格宽高&#xff1b;表格列标题组合&#xff1b;表格固定左序列、顶部序列、第一行、列标题、统计行&#xff1b;自动统计&#xff0c;排序&#xff08;自定义统计规则&#xff09;&#xff1b;表格图文、序列号、列标…

第十四届蓝桥杯三月真题刷题训练——第 6 天

目录 第 1 题&#xff1a;星期计算 问题描述 运行限制 代码&#xff1a; 第 2 题&#xff1a;考勤刷卡 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 代码&#xff1a; 第 3 题&#xff1a;卡片 问题描述 输入格式 输出格式 样…

Flutter-Scaffold组件

在Flutter开发当中&#xff0c;我们可能会遇到以下的需求&#xff1a;实现页面组合使用&#xff0c;比如说有悬浮按钮、顶部菜单栏、左右抽屉侧边栏、底部导航栏等等效果。Scaffold组件可以帮我们实现上面需求说的效果。这篇博客主要分享容器组件的Scaffold组件的使用&#xff…

AI视频智能分析EasyCVR视频融合平台录像计划模块搜索框细节优化

EasyCVR支持海量视频汇聚管理&#xff0c;可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。在录像功能上&#xff0c;平台可支持&#xff1a; 根据业务场景自定义录像计划&#xff0c;可支持7*24H不间断录像&#xff0c;支持…

脑机接口科普0019——大脑的分区及功能

本文禁止转载&#xff01;&#xff01;&#xff01;&#xff01; 在前文脑机接口科普0018——前额叶切除手术_sgmcy的博客-CSDN博客科普中&#xff0c;有个这样的一张图&#xff1a; 这个图呢&#xff0c;把大脑划分为不同的区域&#xff0c;然后不同的区域代表不同的功能。 …

NLL loss(负对数似然损失)

NLL损失在NLP中含义 &#xff1a; 在自然语言处理中&#xff0c;通常用于分类任务&#xff0c;例如语言模型、情感分类等。NLL损失全称为Negative Log-Likelihood Loss&#xff0c;其含义是负对数似然损失。 在NLP任务中&#xff0c;我们通常将文本数据表示为一个序列&#x…

大数据是什么?学习后能找高薪工作么

大数据是什么&#xff0c;比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 简单来说&#xff0c;大数据就是结构化的…

Unity使用webSocket与服务器通信(二)——C#服务器端使用Fleck时的简单服用方法

C#服务端用到Fleck包&#xff0c;它包含哪些可用的回调函数&#xff0c;有哪些常用的api方法&#xff1f; 演示&#xff1a;服务端收到Unity用户发来的信息 1、Fleck服务器提供哪些回调函数 Fleck提供的回调函数有下面几种&#xff1a; //用户连入服务器时... Action OnOp…

如何在Windows 10中安装PostgreSQL 15

PostgreSQL是一个强大的开源对象关系数据库系统,经过35年的积极开发,在可靠性、功能健壮性和性能方面赢得了很高的声誉。 通过官方文档可以找到大量的信息来描述如何安装和使用PostgreSQL。开源社区为熟悉PostgreSQL、发现它的工作原理和寻找职业机会提供了许多有用的地方。…

APP违法违规收集使用个人信息合规评流程和范围

近期&#xff0c;工信部通报2023年第1批《侵害用户权益行为的APP通报》&#xff08;总第27批&#xff09;&#xff0c;共通报46款APP&#xff08;SDK&#xff09;&#xff0c;这些被责令限期整改的APP&#xff08;SDK&#xff09;&#xff0c;涉及的问题主要包括3个方面&#x…