TYUT-企业级开发教程-第6章

这一章 考点不多

什么是缓存?为什么要设计出缓存?

企业级应用为了避免读取数据时受限于数据库的访问效率而导致整体系统性能偏低,通
常会在应用程序与数据库之间建立一种临时的数据存储机制,该临时存储数据的区域称
为缓存。缓存是一种介于数据永久存储介质与应用程序之间的数据临时存储介质,可以
提供临时的数据存储空间,合理使用缓存可以有效减少低速数据读取(例如磁盘 IO )过
程的次数,以提高系统性能

Spring默认缓存 

申明式注解 

  @EnableCaching 注解

@EnableCaching 是 Spring 框架提供的用于 开启基于注解的缓存支持的注解 ,当配置类上使用
@EnableCaching 注解,会默认提供 CacheManager 的实现,并通过 AOP 将缓存行为添加到应用程序。执行操作时,会检查是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的 Bean 执行处理。 

@Cacheable 注解 

@Cacheable 注解用于标注可缓存的方法,通常标注的方法为数据查询方法。标注 @Cacheable 注解的方法在执行时,会先查询缓存,如果查询到的缓存为空,则执行该方法,并将方法的执行结果添加到缓存;如果查询到缓存数据,则不执行该方法,而是直接使用缓存数据 

注解属性

属性名 说明
value/cacheNames 指定缓存的名称,必备属性,这两个属性二选一使用
key 指定缓存数据的 key ,默认使用方法参数值,可以使用 SpEL 表达式
keyGenerator 指定缓存数据的 key 的生成器,与 key 属性二选一使用
cacheManager 指定缓存管理器
cacheResolver 指定缓存解析器,与 cacheManager 属性二选一使用
condition 指定在符合某条件下进行数据缓存
unless 指定在符合某条件下不进行数据缓存
sync 指定是否使用异步缓存,默认为 false

 value 和 cacheNames 属性作用相同,用于指定缓存的名称,二选一即可

@Cacheable("book")
public Book findById(Integer id){
return bookDao.findById(id).get();
}
@Cacheable 注解中可以指定多个缓存的名称,以便使用多个缓存。
@Cacheable({"book","hotBook"})
public Book findById(Integer id){
return bookDao.findById(id).get();
}

 condition 属性
condition 属性用于对数据进行有条件的选择性存储,只有当指定条件为 true 时才会对查询结果进行缓存,可以使用 SpEL 表达式指定属性值

@Cacheable(cacheNames="book", condition="#id > 1")
public Book findBook(Integer id){
return bookDao.findById(id).get();
}

 unless 属性
unless 属性的作用与 condition 属性相反,当指定的条件为 true 时,方法的返回值不会被缓存,也可以使用 SpEL 表达式指定

@Cacheable(cacheNames="book", unless = "#result==null")
public Book findBook(Integer id){
return bookDao.findById(id).get();
}

 sync 属性
在多线程程序中,某些操作可能会同时引用相同的参数,导致相同的对象被计算好几次,从而达不到缓存的目的。对于这种情况,可以使用 sync 属性, sync 属性表示数据缓存过程中是否使用同步模式,默认值为 false ,通常不会使用该属性

  @CachePut 注解

 @CachePut 注 解 的 作 用 是 更 新 缓 存 数 据 , 当 需 要 更 新 缓 存 且 不 影 响 方 法 执 行 时 , 可 以 使 用@CachePut 注解,通常用在数据更新方法上。 @CachePut 注解的执行顺序是,先进行方法调用,然后将方法结果更新到缓存中

两者的区别 

@CachePut注解会强制执行方法并进行缓存更新,使用 @Cacheable 注解时,如果请求能够在缓存中获取到对应的数据,就不会执行当前被 @Cacheable 注解标注的方法 

  @CacheEvict 注解

@CacheEvict 注解的作用删除缓存中的数据,通常标注在数据删除方法上。 @CacheEvict 注解的默认执行顺序是先进行方法调用,然后将缓存清除 

该注解有两个属性

allEntries 属性
allEntries 属性表示是否清除指定缓存空间中的所有缓存数据,默认值为 false ,即默认只删除指定 key对应的缓存数据

allEntries 属性
allEntries 属性表示是否清除指定缓存空间中的所有缓存数据,默认值为 false ,即默认只删除指定 key
对应的缓存数据。
@CacheEvict(cacheNames = "book",allEntries = true)
public void delById(Integer id){
bookDao.deleteById(id);
}

 beforeInvocation 属性
beforeInvocation 属性表示是否在方法执行之前进行缓存清除,默认值为 false ,即默认在执行方法后再进行缓存清除。

@CacheEvict(cacheNames = "book",beforeInvocation = true)
public void delById(Integer id){
bookDao.deleteById(id);
}

 @Caching 注解

 什么时候用?

如果不同缓存之间的条件或者键表达式不同,就需要指定相同类型的多个注解,例如需要同时指定多个@CacheEvict 或 @CachePut ,这个时候可以使用 @Caching 注解。 @Caching 注解用于针对复杂规 则 的 数 据 缓 存 管 理

@Caching 注 解 中 允 许 使 用 多 个 嵌 套的 @Cacheable 、 @CachePut 或 @CacheEvict 。 在 @Caching 注 解 内 部 包 含 有Cacheable 、 put 和 evict 三个属性,分别对应于 @Cacheable 、 @CachePut 和 @CacheEvict 三个注解 

@CacheConfig

@CacheConfig 注解使用在类上,主要用于统筹管理类中所有使用 @Cacheable 、 @CachePut 和@CacheEvict 注解标注方法中的公共属性

@CacheConfig(cacheNames = "book")
@Service
public class BookService {
@Autowired
private BookRepository bookRepository;
@Cacheable
public Book findById(Integer id){
return bookRepository.findById(id).get();
}
}

 

Spring整合Redis 

 

 第6章题目

一、填空题
1.Spring Boot项目中开启缓存管理后,如果没有任何缓存组件,默认使用 Simple   缓存组件进行管理。 
2.当配置类上使用 @EnableCaching    注解,会默认提供CacheManager的实现,并通过AOP将缓存行为添加到应用程序。 
3.   @Cacheconfig  注解主要用于统筹管理类中所有声明式缓存注解的公共属性。 
4.@Cacheable注解的  value   属性和cacheNames属性都可以指定缓存的名称。 
5. Spring Boot项目中,全局配置文件中spring.cache.redis.key-prefix用于指定Redis中缓存key的    前缀 。

二、判断题
1. CacheManager是缓存管理器,基于缓存名称对缓存进行管理。(对 )
2.标注@Cacheable注解的方法执行时,会先进行查询缓存,如果查询到缓存数据,则不执行该方法。 (对 )
3.@Cacheable注解的value和cacheNames属性作用相同,且要二选一使用。 (对 )
4.Ehcache配置文件中,只有eternal为false时timeToLiveSeconds的设置才有效。 ( 对)
5.Ehcache要将缓存持久化到本地磁盘,则操作的实体类需要实现序列化接口。 (对 )

三、选择题
1.下列选项中,关于Spring Boot默认缓存方案说法错误的是(D)。 
A.Spring Boot继承了Spring框架的缓存管理功能。
B.Spring的缓存机制将提供的缓存作用于Java方法上。
C.Spring的默认的缓存方案通过Cache和CacheManager接口统一不同的缓存技术。
D.Spring中的Cache接口制定了管理Cache的规则。

解析:

CacheManager接口负责制定管理缓存(如创建、获取、删除Cache实例)的规则,而 **Cache接口 ** 仅定义了操作缓存数据的方法(如get()put()evict()等)
2.下列选项中,对于@Cacheable注解的属性说明错误的是(A)。 
A.value用于指定CacheManager的实现。
B.key用于指定缓存数据的key。
C.keyGenerator用于指定缓存数据的key的生成器。
D.cacheManager用于指定缓存管理器。

解析:

用于指定缓存的名称


3.下列选项中,对于声明式缓存注解的描述错误的是(B)。 
A.@EnableCaching是Spring框架提供的用于开启基于注解的缓存支持的注解。
B.@CachePut注解的执行顺序是,先将方法结果更新到缓存中,再进行方法调用。
C.@CachePut注解的作用是更新缓存数据。
D.@CacheEvict注解的默认执行顺序是,先进行方法调用,然后将缓存进行清除。


4.下列选项中,对于类上标注@CacheConfig(cacheNames = "book")的描述正确的是(C)。 
A.声明当前类中共享的属性cacheNames的值为book。
B.类中所有方法上使用缓存注解时cacheNames属性的值默认都为book。
C.如果类的方法上再次定义cacheNames属性,那么cacheNames属性的值最终为方法上指定的属性值
D.类的方法上可以再次定义cacheNames属性的值。
5.下列选项中,Ehcache配置文件中用于指定是否启用磁盘持久化的属性是(D)。 
A.external
B.diskPersistent
C.maxElementsInMemory
D.memoryStoreEvictionPolicy

解析:

读英语即可,memoryStoreEvictionPolicy,内存+储存+政策=是否启用磁盘持久化

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

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

相关文章

双检锁(Double-Checked Locking)单例模式

在项目中使用双检锁(Double-Checked Locking)单例模式来管理 JSON 格式化处理对象(如 ObjectMapper 在 Jackson 库中,或 JsonParser 在 Gson 库中)是一种常见的做法。这种模式确保了对象只被创建一次,同时在…

华为网路设备学习-22(路由器OSPF-LSA及特殊详解)

一、基本概念 OSPF协议的基本概念 OSPF是一种内部网关协议(IGP),主要用于在自治系统(AS)内部使路由器获得远端网络的路由信息。OSPF是一种链路状态路由协议,不直接传递路由表,而是通过交换链路…

数独求解器3.0 增加latex格式读取

首先说明两种读入格式 latex输入格式说明 \documentclass{article} \begin{document}This is some text before oku.\begin{array}{|l|l|l|l|l|l|l|l|l|} \hline & & & & 5 & & 2 & 9 \\ \hline& & 5 & 1 & & 7…

20250520在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04.3时跑通4G模块EC20

1、h3-sd-friendlycore-xenial-4.14-armhf-20210618.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区,可以使用SD Card Formatter/SDCardFormatterv5_WinE…

精益数据分析(74/126):从愿景到落地的精益开发路径——Rally的全流程管理实践

精益数据分析(74/126):从愿景到落地的精益开发路径——Rally的全流程管理实践 在创业的黏性阶段,如何将抽象的愿景转化为可落地的产品功能?如何在快速迭代中保持战略聚焦?今天,我们通过Rally软…

Javascript 编程基础(4)函数 | 4.3、apply() 与 call() 方法

文章目录 一、apply() 与 call() 方法1、核心概念1.1、call() 方法1.2、apply() 方法 2、使用示例2.1、基本用法2.2、处理 this 指向问题 3、call() 与 apply() 的区别 一、apply() 与 call() 方法 apply() 和 call() 都是 JavaScript 函数对象的方法,用于显式设置函…

读一本书第一遍是快读还是细读?

在时间充足且计划对重要书籍进行多遍阅读的前提下,第一遍阅读的策略可以结合**「快读搭建框架」与「标记重点」**,为后续细读奠定基础。以下是具体建议及操作逻辑: 一、第一遍:快读为主,目标是「建立全局认知」 1. 快…

基于大模型的全面惊厥性癫痫持续状态技术方案

目录 一、数据收集与预处理系统1.1 多模态数据集成模块1.2 数据预处理流程二、大模型构建与训练系统2.1 模型架构设计2.2 训练流程三、术前评估系统3.1 癫痫发作风险预测3.2 手术可行性评估流程四、术中决策支持系统4.1 实时监测数据处理4.2 麻醉方案优化流程五、术后护理系统5…

React 19 中的useRef得到了进一步加强。

文章目录 前言一 useRef 的核心原理1.1 为什么需要 useRef?1.2 基本语法 二、React 19 中 useRef 的常见用法2.1 访问 DOM 元素2.2 保存跨渲染的数据 三、React 19 中的改进ref 作为一个属性案例演示(触发子组件焦点事件) 注意 总结 前言 在 React 的世界里&#x…

idea查看class文件源码

1、在idea中查看.class文件源码 在idea的一个工程里面将.class文件复制进去,会提示如下: 这时候,打开一个其他类,右键-》"show in explorer",打开资源文件夹,这时候将class文件粘贴在此处&#…

基于 Vue + CEF3 的浏览器批量管理系统(附功能详解)

🌐 基于 Vue CEF3 的浏览器批量管理系统(附功能详解) 在当前多任务操作需求日益增长的背景下,如何高效管理多个浏览器实例成为了一个值得探讨的问题。今天给大家介绍一款基于 Vue 和 CEF3 构建的浏览器批量管理系统,…

JS实现古诗竖排从右至左

一个老题目,将下面古诗文由横排,变成古文竖排模式: 静夜思 李白 床前明月光, 疑似地上霜。 举头望明月, 低头思故乡。变成: 低|举|疑|床|静 头|头|似|前|夜 思|望|地|明|思 故|明|上|月| 乡|月|霜|光|李…

在 Android 中实现支持多手势交互的自定义 View(Kotlin 完整指南)

本文将手把手教你创建一个支持拖动、缩放、旋转等多种手势交互的自定义 View,并提供完整的代码实现和优化建议。 一、基础实现 1.1 创建自定义 View 骨架 import android.content.Context import android.graphics.* import android.util.AttributeSet import an…

Kotlin 协程 (一)

1. Kotlin 协程的核心概念 1.1 协程(Coroutine) 定义:协程是一种轻量级的执行上下文,可以在任何时候挂起和恢复,而不需要阻塞线程。特点: 比传统线程更轻量,开销更小。支持挂起和恢复&#xf…

机器学习 集成学习方法之随机森林

集成学习方法之随机森林 1 集成学习2 随机森林的算法原理2.1 Sklearn API2.2 示例 1 集成学习 机器学习中有一种大类叫集成学习(Ensemble Learning),集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类…

thinkphp6实现统一监听并记录所有执行的sql语句除查询外

创建文件app/middleware/SqlLogger.php <?php namespace app\middleware;use think\facade\Db; use think\facade\Session;class SqlLogger {public function handle($request, \Closure $next){// 监听所有SQL $request->ip()Db::listen(function($sql, $time) {if (p…

pytorch训练可视化工具---TensorBoard

一、目的&#xff1a;为什么使用 TensorBoard 调控模型 使用 TensorBoard 可以帮我们&#xff1a; 实时查看 loss / acc 曲线 → 判断是否过拟合、欠拟合&#xff1b; 对比不同模型或超参数的效果&#xff1b; 可视化模型结构 → 帮助调试模型设计&#xff1b; 查看权重/梯…

机器学习知识自然语言处理入门

一、引言&#xff1a;当文字遇上数学 —— 自然语言的数字化革命 在自然语言处理&#xff08;NLP&#xff09;的世界里&#xff0c;计算机要理解人类语言&#xff0c;首先需要将文字转化为数学向量。早期的 One-Hot 编码如同给每个词语分配一个唯一的 “房间号”&#xff0c;例…

Linux-线程概念和控制

1.Linux线程概念 1.1什么是线程 • 在⼀个程序⾥的⼀个执⾏路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“⼀个进程内部 的控制序列” • ⼀切进程⾄少都有⼀个执⾏线程 • 线程在进程内部运⾏&#xff0c;本质是在进程地址空间内运⾏…

【氮化镓】低剂量率对GaN HEMT栅极漏电的影响

2024 年 2 月 22 日,中国科学院新疆理化技术研究所的Li等人在《IEEE ACCESS》期刊发表了题为《Degradation Mechanisms of Gate Leakage in GaN-Based HEMTs at Low Dose Rate Irradiation》的文章,基于实验分析和 TCAD 仿真,研究了低剂量率辐照下基于 GaN 的 p 型栅高电子迁…