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.pswp.cn/pingmian/81775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81775.shtml
英文地址,請注明出處:http://en.pswp.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 型柵高電子遷…