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.mzph.cn/news/726114.shtml

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

相关文章

上市公司财务报表精讲系列一:黄山旅游

上市公司财务报表精讲系列一&#xff1a;黄山旅游 一、主营业务分行业、分产品、分地区情况二、董事会报告三、净利润现金流四、净资产收益率五、权益乘数和总资产周转率六、负债结构图七、行业分析八、案例总结九、2023年度业绩 一、主营业务分行业、分产品、分地区情况 二、董…

为国产信创服务器提供LDAP统一身份认证方案

金融信创作为 8 大行业信创之首&#xff0c;早已成为其他行业信创建设的参考。金融行业有着极为复杂的业务场景&#xff0c;对系统有着极高的稳定可靠需求&#xff0c;因此&#xff0c;在寻找微软 AD 国产化替代方案时&#xff0c;常会涉及到更深层次的场景。例如&#xff0c;最…

哪些行业将有可能被ai替代

随着AI技术的不断发展&#xff0c;越来越多的行业开始受到其影响&#xff0c;一些工作可能会被AI替代。以下是一些可能被AI替代的行业和领域&#xff1a; 制造业&#xff1a;制造业中的许多重复性劳动&#xff0c;如装配线上的工作&#xff0c;可能首先被AI和自动化技术替代。…

【test】【linux perf】【Android simpleperf】 获取火焰图 使用示例

文章目录 火焰图perfperf listperf recordperf scriptperf statperf reportperf top 官方perf使用示例记录60s系统中发生的所有上下文切换事件监测整个系统的 CPU 使用情况抓取 CPU 事件数据统计 CPU 循环事件、指令数、缓存引用、缓存失效和总线周期等性能指标的命令以mysqld进…

unity学习(45)——选择角色菜单——客户端处理服务器的数据

1.已知客户端ReceiveCallBack中已经收到来自服务器返回的数据包。 2.问题是客户端MessageManager中的Update并没有拆解该数据包 &#xff0c;因该是因为脚本没有挂载。 挂在SelectMenu场景中的Camera上即可。 挂载后成功达到目地 其中Update中的List是一个起到全局效果的static…

构建 LLM 支持的应用程序

LangChain 教程&#xff1a;构建 LLM 支持的应用程序的指南 一、引言 在当前的科技浪潮中&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为引领人工智能发展的重要力量。许多企业和开发者都渴望利用LLM构建出功能强大的应用程序。然而&#xff0c;对于初学者来说…

【七】【SQL】自连接

自连接初见 数据库中的自连接是一种特殊类型的SQL查询&#xff0c;它允许表与自身进行连接&#xff0c;以便查询表中与其他行相关联的行。自连接通常用于处理那些存储在同一个表中的但彼此之间具有层级或关系的数据。为了实现自连接&#xff0c;通常需要给表使用别名&#xff…

CVPR 2024 | Modular Blind Video Quality Assessment:模块化无参视频质量评估

无参视频质量评估 (Blind Video Quality Assessment&#xff0c;BVQA) 在评估和改善各种视频平台并服务用户的观看体验方面发挥着关键作用。当前基于深度学习的模型主要以下采样/局部块采样的形式分析视频内容&#xff0c;而忽视了实际空域分辨率和时域帧率对视频质量的影响&am…

学习 考证 帆软 FCP-FineBI V6.0 心得

学习背景&#xff1a; 自2024年1月起&#xff0c;大部分时间就在家里度过了&#xff0c;想着还是需要充实一下自己&#xff0c;我是一个充满热情的个体。由于之前公司也和帆软结缘&#xff0c;无论是 Fine-Report 和 Fine-BI 都有接触3年之久&#xff0c;但是主要做为管理者并…

多重验证及比特币脚本中的P2PK、P2PKH、P2SH机制

在数字货币的世界中&#xff0c;安全性和有效性是核心要素。其中&#xff0c;二重验证作为一种强化账户安全的重要手段&#xff0c;以及比特币赎回脚本系统中的P2PK、P2PKH、P2SH等交易类型&#xff0c;对于理解区块链技术的底层逻辑和实现方式至关重要。本文将对这些概念进行深…

使用rust实现九九乘法表

rust目前拥有接近c/c的运行速度以及更快的编码支持&#xff0c;所以是很值得学习得一门语言。rust的语法及设计理念与其他的语言也有许多的不同之处。比如其特有的所有权属性。可以让开发者快速的开发出高效的运行程序。对于内存的管理也有极好的管理方案。 在这里使用rust语言…

在Java中,Scanner类是用来获取用户输入的

在Java中&#xff0c;Scanner类是用来获取用户输入的。以下是一个简单的示例&#xff0c;展示如何使用Scanner类从控制台读取用户输入&#xff1a; java import java.util.Scanner; // 导入Scanner类 public class Main { public static void main(String[] args)…

基于jwt -用户离线检测的实现思路

其实思路很简单。就是,用户与系统交互的token。token的拦截时间 - token的创建时间 用户与系统交互的时间差值。只要这个时间差值为负数&#xff0c;就判定为离线。基于此,我们每次与系统交互,都需要重新创建token&#xff0c;从而不断刷新token的创建时间来给下次系统判定来使…

MyBatis复杂映射开发之多对多查询

多对多查询的模型 用户表和角色表的关系为&#xff0c;一个用户有多个角色&#xff0c;一个角色被多个用户使用。 多对多查询的需求&#xff1a;查询所有用户的同时查询出该用户对应的所有角色。 startuml !theme plain top to bottom direction skinparam linetype ortho cl…

C# 在exe中启动另外一个exe时的关闭方法

在C#中&#xff0c;如果你想要从一个exe程序中启动另一个exe程序&#xff0c;并希望在需要时能够关闭它。 一、启动外部exe程序&#xff1a; 使用System.Diagnostics.Process启动程序&#xff0c;代码如下&#xff1a; private void btnStart_Click(object sender, RoutedEve…

阿里云服务器使用教程_搭建网站教程_2024建站教程

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

自然语言处理(NLP)—— 语言学、结构的主要任务

1. 计算语言学的任务 1.1 自然语言处理任务——句法分析任务 1.1.1 词法&#xff08;Syntatic tasks:Word level&#xff09; 在自然语言处理中&#xff0c;词法分析主要涉及到词汇层面的处理&#xff0c;包括形态划分、分词、切分以及词性标注等任务。 1.1.1.1 形态划分&am…

XUbuntu22.04之显示实时网速(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

智能网联各地市政策盘点

本文旨在对2023年及2024年初各地市所出台的智能网联相关政策进行全面的梳理与总结。通过与此前发布的关于2023年和2024年初各部委、省、直辖市智能网联相关政策的盘点相互呼应&#xff0c;力求为读者呈现一个全面、系统的政策概览。 文 | 吴冬升 全文6000字&#xff0c;预计阅读…

轮询--一起学习吧之架构

一、定义 轮询&#xff08;Polling&#xff09;是一种CPU决策如何提供周边设备服务的方式&#xff0c;又称“程控输出入”&#xff08;Programmed I/O&#xff09;。这种方式是由CPU定时发出询问&#xff0c;依序询问每一个周边设备是否需要其服务&#xff0c;有即给予服务&am…