springBoot整合Redis(三、整合Spring Cache)

news2025/1/22 21:04:40

        缓存的框架太多了,各有各的优势,比如Redis、Memcached、Guava、Caffeine等等。
如果我们的程序想要使用缓存,就要与这些框架耦合。聪明的架构师已经在利用接口来降低耦合了,利用面向对象的抽象和多态的特性,做到业务代码与具体的框架分离。
        但我们仍然需要显式地在代码中去调用与缓存有关的接口和方法,在合适的时候插入数据到缓存里,在合适的时候从缓存中读取数据。
        想一想AOP的适用场景,这不就是天生就应该AOP去做的吗?
        是的,Spring Cache就是一个这个框架。它利用了AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解,就能实现缓存功能了。而且Spring Cache也提供了很多默认的配置,用户可以3秒钟就使用上一个很不错的缓存功能。

一、什么是Spring Boot Cache?

        Spring Cache本身是一个缓存体系的抽象实现,并没有具体的缓存能力,要使用Spring Cache还需要具体的缓存实现来完成。
        Spring Boot 集成了多种cache的实现,如果你没有在配置类中声明CacheManager或者CacheResolvoer,那么SpringBoot会按顺序在下面的实现类中寻找:

  • 每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否已经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。

  • 使用Spring缓存抽象时我们需要关注以下两点;

    1、确定方法需要被缓存以及他们的缓存策略

    2、从缓存中读取之前缓存存储的数据

二、简单使用SpringCache

        分为很简单的三步:加依赖,开启缓存,加缓存注解。

        1) 加依赖

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

        2 )开启缓存

        在启动类加上@EnableCaching注解即可开启使用缓存。

@SpringBootApplication
@EnableCaching
public class CachingApplication {

    public static void main(String[] args) {
        SpringApplication.run(CachingApplication.class, args);
    }

}

        3)加缓存注解

        在要缓存的方法上面添加@Cacheable注解,即可缓存这个方法的返回值。

    @Cacheable(value = "emp" ,key = "targetClass + methodName +#p0")
    public List<NewJob> queryAll(User uid) {
        return newJobDao.findAllByUid(uid);
    }

        此处的value是必需的,它指定了你的缓存存放在哪块命名空间。

        此处的key是使用的spEL表达式,参考上章。这里有一个小坑,如果你把methodName换成method运行会报错,观察它们的返回类型,原因在于methodNameStringmethohMethod

        此处的User实体类一定要实现序列化public class User implements Serializable,否则会报java.io.NotSerializableException异常。

        需要注意的是,调用加了@Cacheable 的方法,调用方法必须跟加了@Cacheable 的方法 在不同的类中,跟反向代理有关,不然不会生效。

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

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

相关文章

uniapp+vue3+vites使用lime-echart问题记录

问题记录 1.vue3使用echarts,H5和微信小程序兼容问题 1.vue3使用echarts,H5和微信小程序兼容问题 问题描述&#xff0c;正常使用echarts&#xff0c;H5正常&#xff0c;小程序报错 报错信息如下 解决方案&#xff1a; 注意要点一&#xff1a;vue3需要使用esm文件 地址&#x…

Elasticsearch:从 ES|QL 到 Python 数据帧

在我之前的文章 “Elasticsearch&#xff1a;ES|QL 查询展示”&#xff0c;我展示了如何在 Kibana 中使用 ES|QL 对索引来进行查询及统计。在很多的情况下&#xff0c;我们需要在客户端中来对数据进行查询&#xff0c;那么我们该怎么办呢&#xff1f;我们需要使用到 Elasticsea…

怎么将电脑excel文档内的数据转换为图片形式

你平时在办公室会遇到格式转换的问题吗&#xff1f;比如PDF转Word&#xff0c;WPS转PDF&#xff0c;PDF转TXT&#xff0c;图片转PDF等。边肖最近在工作过程中遇到了类似的问题。为了更方便的查看表格&#xff0c;需要将Excel表格转换成图片格式。遇到这样的问题&#xff0c;很多…

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽(时隔一年,再谈C++抽象内存模型)

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽 CPP的四大内存分区模型 在 C 中&#xff0c;**内存分区是一种模型&#xff0c;用于描述程序运行时内存的逻辑组织方式&#xff0c;但在底层操作系统中&#xff0c;并不存在严格意义上的内存分区。**操作系统通常将内存分…

计算机大数据毕业设计-基于Flask的旅游推荐可视化系统的设计与实现

基于Flask的旅游推荐可视化系统的设计与实现 编程语言&#xff1a;Python3.10 涉及技术&#xff1a;FlaskMySQL8.0Echarts 开发工具&#xff1a;PyCharm 摘要&#xff1a;以Pycharm为旅游推荐系统开发工具&#xff0c;采用B/S结构&#xff0c;使用Python语言开发旅游景点推…

【python】成功解决ModuleNotFoundError: No module named ‘tensorboardX‘

【python】成功解决ModuleNotFoundError: No module named ‘tensorboardX’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f…

二维码门楼牌管理系统应用场景:助力环保部门提升监管效率

文章目录 前言一、二维码门楼牌管理系统的环保应用场景二、二维码门楼牌管理系统如何助力环保监管三、二维码门楼牌管理系统与环保部门的联动效应 前言 随着城市化进程的加速&#xff0c;环保问题日益受到人们的关注。二维码门楼牌管理系统的出现&#xff0c;为环保部门提供了…

【论文阅读】DeepLab:语义图像分割与深度卷积网络,自然卷积,和完全连接的crf

【论文阅读】DeepLab:语义图像分割与深度卷积网络&#xff0c;自然卷积&#xff0c;和完全连接的crf 文章目录 【论文阅读】DeepLab:语义图像分割与深度卷积网络&#xff0c;自然卷积&#xff0c;和完全连接的crf一、介绍二、联系工作三、方法3.1 整体结构3.2 使用空间金字塔池…

机器人期刊:Science Robotics and IEEE Transactions

文章目录 1. Science Robotics (出版商 AAAS)2. IEEE Transactions on RoboticsReference1. Science Robotics (出版商 AAAS) https://www.science.org/journal/scirobotics 2. IEEE Transactions on Robotics

动手学深度学习-现代循环神经网络(GRU、LSTM、编码器-解码器等)

现代循环神经网络 上一章节&#xff08;循环神经网络&#xff09;介绍了循环神经网络的基础知识&#xff0c;这种网络可以更好的处理序列数据。我们在文本数据上实现了基于循环神经网络的语言模型&#xff0c;但是对于当今各种各样的序列学习问题&#xff0c;这些技术可能不够…

SpringBoot集成JSP和war包部署到Tomcat

SpringBoot集成JSP 加依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot…

Spring Security的API Key实现SpringBoot 接口安全

Spring Security的API Key实现SpringBoot 接口安全 Spring Security 提供了各种机制来保护我们的 REST API。其中之一是 API 密钥。API 密钥是客户端在调用 API 调用时提供的令牌。 在本教程中&#xff0c;我们将讨论如何在Spring Security中实现基于API密钥的身份验证。 API…

hyperf 二十五 数据迁移 一

教程&#xff1a;Hyperf 版本说明 一 生成迁移 php bin/hyperf.php gen:migration create_users_table 执行文件&#xff1a;Hyperf\Database\Commands\Migrations\GenMigrateCommand 功能&#xff1a;创建迁移文件 参数&#xff1a; name 文件名称 选项&#xff1a; c…

Docker连接Mysql

Docker连接mysql Docker通过云服务器&#xff0c;与本地连接 引言&#xff1a;这个东西我看狂神秒解决&#xff0c;我就试试了&#xff0c;结果G了&#xff0c;花了我两个小时&#xff0c; 希望内容能帮你解决问题 话不多说&#xff0c;直接上内容&#xff1a; navicat连接…

记一次 .NET某设备监控自动化系统 CPU爆高分析

一&#xff1a;背景 1. 讲故事 先说一下题外话&#xff0c;一个监控别人系统运行状态的程序&#xff0c;结果自己出问题了&#xff0c;有时候想一想还是挺讽刺的&#xff0c;哈哈&#xff0c;开个玩笑&#xff0c;我们回到正题&#xff0c;前些天有位朋友找到我&#xff0c;说…

redis IO多路复用模型详解

一、IO 1.1、IO模型 我们常说的IO&#xff0c;指的是文件的输入和输出 &#xff0c;但是在操作系统层面是如何定义IO的呢&#xff1f;到底什么样的过程可以叫做是一次IO呢&#xff1f; 拿一次磁盘文件读取为例&#xff0c;我们要读取的文件是存储在磁盘上的&#xff0c;我们的…

Redis的BitMap的使用

简介 Redis的Bitmap不是一个独立的数据结构类型&#xff0c;而是基于字符串&#xff08;String&#xff09;类型实现的一种功能 &#xff0c;存储的是二进制的文件&#xff0c;布隆过滤器就是基于BitMap实现的。 语句的使用 新增操作 setbit key offset value offset的首位…

车充芯片方案 H4112 异步整流芯片 12V转5V 24V转5V 24V转9V 24V转12V

车充芯片方案的工作原理&#xff1a; 利用PWM&#xff08;脉冲宽度调制&#xff09;技术来调节开关管的开关时间&#xff0c;从而实现稳定的输出电压&#xff0c;就是通过微处理器的数字输出来对模拟电路进行控制&#xff0c;根据面积等效原理&#xff0c;通过对一系列脉冲的宽…

支持向量机 SVM | 非线性可分:核函数

目录 一. 情景引入二. 核函数1. 核函数的分类1.1 线性核函数(Linear Kernel)1.2 多项式核函数(Polynomial Kernel)1.3 高斯核函数(Radial Basis Function Kernel)1.4 Sigmoid核函数(Sigmoid Kernel) 2. 核函数小节 前面我们讲述了SVM算法的线性可分问题&#xff0c;即对应硬间隔…

集简云新增通义千问qwen 72b chat、qwen1.5 等多种大语言模型,提升多语言支持能力

通义千问再开源&#xff01;继发布多模态模型后&#xff0c;通义千问 1.5 版本也在春节前上线。 此次大模型包括六个型号&#xff1a;0.5B、1.8B、4B、7B、14B 和 72B&#xff0c;性能评测基础能力在在语言理解、代码生成、推理能力等多项基准测试中均展现出优异的性能&#x…