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

        缓存的框架太多了,各有各的优势,比如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.hqwc.cn/news/517653.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

答题pk小程序源码技术大解析

答题pk小程序源码解析 在数字化时代&#xff0c;小程序因其便捷性、即用性而受到广泛欢迎。其中&#xff0c;答题pk小程序更是成为了一种寓教于乐的现象。它不仅为用户提供了趣味性的知识竞技平台&#xff0c;还为企业、教育机构等提供了互动营销和知识传播的新途径。本文将对…

回溯五题【Leetcode17数独/37组合问题/51N皇后/212字典树/980状态压缩】

文章目录 关于回溯37. 解数独&#xff08;37.sudoku-solver&#xff09;17. 电话号码的数字组合&#xff08;17.letter-combinations-of-a-phone-number&#xff09;51. N皇后&#xff08;51.n-queens&#xff09;212. 单词搜索 II&#xff08;212.word-search-ii&#xff09;简…

Mysql5.7的安装详细步骤(计算机专业大一新生必看)

以下是Mysql 5.7的安装详细步骤&#xff1a; 下载安装程序&#xff1a; 前往Mysql官方网站&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html选择适合您操作系统的版本进行下载。 Mysql windows64位 下载安装版本5.7 : https://dev.mysql.com/downloads/file/?id52…

基于Python实现银行卡识别

在本文中将介绍如何使用Python和深度学习技术来实现银行卡识别功能。银行卡识别是一个在金融、安全等领域具有重要应用的问题&#xff0c;将使用深度学习模型来实现银行卡图像的识别和分类。 目录 引言数据集准备预处理和特征提取模型选择与训练模型评估与性能优化部署与应用 引…

深入探讨javascript的流程控制与分支结构,以及js的函数

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属的专栏&#xff1a;前端泛海 景天的主页&#xff1a;景天科技苑 文章目录 1.流程控制与分支结构1.if分支结构2.switch case 分支结构3.循环结…

ROS从入门到精通4-2:Docker安装ROS、可视化仿真与终端复用

目录 0 专栏介绍1 Docker安装ROS2 Docker可视化仿真2.1 显示配置2.2 启动容器 3 终端复用工具3.1 session操作3.2 window操作3.3 pane操作3.4 其他操作 0 专栏介绍 本专栏旨在通过对ROS的系统学习&#xff0c;掌握ROS底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS…

UE5数字孪生系列笔记(一)

智慧城市数字孪生系统 虚幻引擎连接数据库 将自己的mysql版本的libmysql.dll替换掉插件里面的libmysql.dll 然后将这个插件目录复制到虚幻项目目录下 然后添加这个插件即可 新建一个UMG&#xff0c;添加一个按钮试试&#xff0c;数据库是否连接 将UI添加到视口 打印是否连接…

C语言初阶—操作符

逻辑操作符&#xff1a; 这段代码的结果是什么&#xff1f; #include <stdio.h>int main() {int i 0,a 0,b 2,c 3,d 4;i a && b && d;printf("a%d,b%d,c%d,d%d\n",a,b,c,d);return 0; } 计算的时候&#xff0c;a先使用&#xff0c;是0&…

EVSV08-25、EVSV08-28、EVEP-08、EVEP-10、EVGR-10插装式比例阀放大器

EVBP-10、EVF-12、EVGB-10、EVRB-02、EVGB-E081、EVRB-03、EVF-08、EVRB-06、EVF-10、EVRB-10、EVEP-12、EVR-01、EVR-10、EVR-12、EVR-T8、EVSV08-20、EVSV08-25、EVSV08-28、EVEP-08、EVEP-10、EVGR-10插装式比例阀包括比例止逆阀、比例换向阀、比例调速阀、比例减压阀、比例…

julia语言中的异常处理

在程序运行中&#xff0c;可能会遇到各种预期之外的情况&#xff0c;如用户输入错误、网络故障、硬件问题等。通过异常处理机制&#xff0c;将错误处理代码与正常的业务逻辑代码分离开来&#xff0c;程序可以在遇到这些问题时做出适当的响应&#xff0c;而不是直接崩溃&#xf…

在vue3中使用el-tree-select做一个树形下拉选择器

el-tree-select是一个含有下拉菜单的树形选择器&#xff0c;结合了 el-tree 和 el-select 两个组件的功能。 因为包含了el-tree的功能&#xff0c;我们可以自定义tree的节点&#xff0c;创造出想要的组件 使用default插槽可以自定义节点内容&#xff0c;它的default插槽相当于…

python自动化之获取实际响应数据-登录模块与我的商铺(第四天)

1.配置文件 新建config.py(config包) 2.登录 新建login.py模块(lib-apiLib) 根据接口文档,可知道登录接口的密码需要md5加密 接口文档,如有需要,可在评论区留言!!! login.py代码 # -*- coding: utf-8 -*- # @File : login.py # @Time : 2024/3/4 15:32 # @Autho…