1. 程式人生 > >springboot中關於快取@Cacheable、@CacheEvict、@CachePut的用法理解淺析

springboot中關於快取@Cacheable、@CacheEvict、@CachePut的用法理解淺析

我們要實現的是,當查詢時,先從快取中查詢資料,當資料存在時,不查資料庫,當資料不存在時,查詢資料庫,並將值存到redis中

首先,快取中是沒有資料的,redis查詢keys * ,會發現redis中無資料


此時,呼叫查詢方法(service層)

/**
 * 查詢所有角色選單資料許可權資訊
 * @return
*/
@Override
@Cacheable(key = "#p0.roleId")
public List<RoleMenuDataPermissions> list(RoleMenuDataPermissions roleMenuDataPermissions) {
    return 
roleMenuDataPermissionsDao.list(roleMenuDataPermissions); }
會將查詢到的結果存到redis快取中,key值就是引數的roleId,  key="#p0.roleId"是指方法的第一個引數的roleId屬性為key,

此時,reids中會有資料如下圖:


此時,要新增或者修改或者刪除資料,那麼,需要將redis中資料刪除,當再次呼叫查詢方法時,會發現redis中沒有資料,需要從資料庫中查詢並存到快取redis中,那麼新增或者修改或者刪除方法如下這種寫法:

/**
 * 插入
 * @param roleMenuDataPermissions
* @return */ @Override @Transactional @CacheEvict(key="#p0.roleId") public int insert(RoleMenuDataPermissions roleMenuDataPermissions) { return roleMenuDataPermissionsDao.insert(roleMenuDataPermissions); }
/**
 * 根據主鍵更新
 * @param roleMenuDataPermissions
* @return
*/
@Override
@Transactional
@CacheEvict
(key="#p0.roleId") public int updateByPrimaryKey(RoleMenuDataPermissions roleMenuDataPermissions) { return roleMenuDataPermissionsDao.updateByPrimaryKey(roleMenuDataPermissions); }

/**
 * 根據主鍵刪除(邏輯刪)
 * @param roleMenuDataPermissions
* @return
*/
@Override
@Transactional
@CacheEvict(key="#p0.roleId")
public int deleteByPrimaryKey(RoleMenuDataPermissions roleMenuDataPermissions) {
    return roleMenuDataPermissionsDao.deleteByPrimaryKey(roleMenuDataPermissions);
}

@CacheEvict(key="#p0.roleId") 會根據方法第一個引數的roleId為key,從redis中刪除資料,這樣,當再次呼叫查詢方法時,redis中根據相同的roleId是查不到資料的,需要從資料庫中查詢,@Cacheable會自動將查詢到的redis中沒有的資料存到redis中

以上適用於批量查詢,當還有查詢某一條資料的需求是,修改方法可以增加一個@CachePut方法

小結:@Cacheable是想快取中新增資料,@CacheEvict是刪除快取中資料,@CachePut是更新快取中資料

具體參考:

https://www.cnblogs.com/huzi007/p/6262729.html?utm_source=itdadao&utm_medium=referral

相關推薦

springboot關於快取@Cacheable@CacheEvict@CachePut用法理解淺析

我們要實現的是,當查詢時,先從快取中查詢資料,當資料存在時,不查資料庫,當資料不存在時,查詢資料庫,並將值存到redis中 首先,快取中是沒有資料的,redis查詢keys * ,會發現redis中無資料 此時,呼叫查詢方法(service層) /** * 查詢所有

Spring快取註解@Cacheable@CacheEvict@CachePut使用

從3.1開始,Spring引入了對Cache的支援。其使用方法和原理都類似於Spring對事務管理的支援。Spring Cache是作用在方法上的,其核心思想是這樣的:當我們在呼叫一個快取方法時會把該方法引數和返回結果作為一個鍵值對存放在快取中,等到下次利用同樣的引數來呼

配置ehCache快取策略@Cacheable,@CacheEvict,@CachePut

ehCache ehcache.xml解析 <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="10" timeToLiveSe

Spring快取註解@Cacheable,@CacheEvict,@CachePut的使用

  大部分公司在開發中運用快取是一件很平常的事,主要用來緩解資料庫的訪問壓力,其使用方法和原理都類似於Spring對事務管理的支援。在我所開發中,一般都將這三個註解運用到方法上,那麼其表現為:當我們呼叫這個快取方法時會把該方法引數和返回結果作為一個鍵值對存放在快取中,等到下次利用同樣的引數來呼叫該方法時將不再

SQL的各種連接(cross joininner joinfull join)的用法理解

選擇 join 返回 要求 重復 元組 連接 相同 where SQL中的連接可以分為內連接,外連接,以及交叉連接 。 1. 交叉連接CROSS JOIN 如果不帶WHERE條件子句,它將會返回被連接的兩個表的笛卡爾積,返回結果的行數等於兩個表行數的乘積; 舉例,下列A、

oraclestart with和connect by的用法理解

 1.樹結構的描述     樹結構的資料存放在表中,資料之間的層次關係即父子關係,通過表中的列與列間的關係來描述,如EMP表中的EMPNO和MGR,EMPNO表示該僱員的編號,MGR表示領導該僱員的人的編號,即子節點的MGR值等於父節點的EMPNO值。在表的每一行中都有一個表示父節點的MGR(除根節點外),通

1 Springboot使用redis,自動快取更新刪除

第一篇記錄一下在springboot中,redis的基礎用法,自動快取新增的資料,自動修改及刪除。 在本機安裝好mysql和redis。新建一個springboot的web專案,在新建專案時勾選redis,mysql。 pom檔案如下: <?xml version="

小白的springboot之路(八)繼承Redis以及@Cacheable註解實現Redis快取

0、前言   在專案中,快取作為一種高效的提升效能的手段,幾乎必不可少,Redis作為其中的佼佼者被廣泛應用; 一、spring boot整合Redis 1、新增依賴 <dependency> <groupId>org.spring

linux服務器Jenkins集成gitGradle持續構建Springboot項目

完成 var 方式 ecb posit table 構建 bin 路徑 Jenkins是用java編寫的開源持續集成工具,目前被國內外各公司廣泛使用。本章教大家如何在linux服務器中使用Jenkins自動發布一個可作為linux服務發布的Springboot項目。 自

SpringBoot其他普通類呼叫Spring管理的Servicedao等bean

在springboot的使用中,有時需要在其他的普通類中呼叫託管給spring的dao或者service,從而去操作資料庫。網上大多數的資料都是說新增一些註解什麼的,但是這都是不行的。   舉個使用情景:比如在伺服器在於硬體或者客戶端之間進行Socket通訊時,那麼如果說伺服

springboot配置addResourceHandler和addResourceLocations,使得可以從磁碟讀取圖片視訊音訊等

磁碟目錄 WebMvcConfig的程式碼 //對靜態資源的配置 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { String os = System.ge

Springboot Redis快取使用 @Cacheable不生效的原因,以及@Cacheable 的一些注意點

Springboot 中 Redis快取使用 @Cacheable不生效的原因,以及@Cacheable 的一些注意點 1、有如下程式碼 // get 方法呼叫了 stockGive 方法,stockGive 方法使用了快取 // 但是每次執行get 方

如何解讀springboot 約定大於配置JPA是什麼咋用

1、大家都知道springboot 的核心:約定大於配置,什麼意思呢? 那麼怎麼每個約定大於配置呢?摘自百科一段: 》在微服務體系中,簡單說,在springboot 中,約定大於配置這句話可以從以下來理解: 1、開發人員僅需規定應用中不符約定的部分; 2、在沒有規定配置

springboot快取—使用原理整合redis

      Java快取介面標準JSR-107:Java Caching定義了5個核心介面,分別是CachingProvider(快取提供者), CacheManager(快取管理器), Cache(快取元件), Entry (key-value對)和Expiry(條目有效期

SpringBoot使用AMQ的兩種方式二(Java配置註解方式)

                                       使用@JmsListener註解方式 1. 工程目錄                                                                       

springboot-redis快取使用

一、建立springboot專案 二、pom.xml新增以下依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifa

SpringBoot整合Redis實現自動快取更新刪除

1:引入springboot redis的maven依賴(建議使用spring-boot-dependencies或者使用spring-io-platform進行構建專案) <dependency> <g

02) SpringBoot Controller的使用資料庫操作事物管理修改banner

1 Controller的使用   特點:程式設計技巧和SpringMVC幾乎完全一樣   注意:@RestController = @Controller + @ResponseBody   注意:讀取路徑引數和請求引數是利用的不通的註解實現,其中請求引數是可以設定預

[轉載]springbootElasticSearch入門與進階:組合查詢Aggregation聚合查詢(你想要的都有)

原文:https://blog.csdn.net/topdandan/article/details/81436141 1.springboot中配置elasticSearch 1.1在工程中引入相關的jar包   1.1.1 在build.gradle中新增需要的jar包       我建立的gradle工

快取演算法及RedisMemcachedGuavaEhcache的演算法

https://my.oschina.net/ffy/blog/501003   https://yq.aliyun.com/articles/622757   https://blog.csdn.net/starrykey/article/details/52049613 &n