自從SpringBoot
升級到了2.0
版本後整合Redis
作為快取就更為簡單了,我們只需要配置Redis
相關的連結資訊以及使用註解@EnableCaching
開啟快取,這樣我們就直接可以在專案內使用快取相關的內容。
由於最近這段時間一直在研發公司的持久化封裝框架,用於編寫文章的時間比較少,還請大家見諒,不過還會持續更新
SpringBoot
以及SpringCloud
等系列文章,敬請期待!!!
本章目標
基於SpringBoot2
完成快速整合Reids
作為專案快取,並講解一些快取常用的配置。
SpringBoot 企業級核心技術學習專題
專題 | 專題名稱 | 專題描述 |
---|---|---|
001 | Spring Boot 核心技術 | 講解SpringBoot一些企業級層面的核心元件 |
002 | Spring Boot 核心技術章節原始碼 | Spring Boot 核心技術簡書每一篇文章碼雲對應原始碼 |
003 | Spring Cloud 核心技術 | 對Spring Cloud核心技術全面講解 |
004 | Spring Cloud 核心技術章節原始碼 | Spring Cloud 核心技術簡書每一篇文章對應原始碼 |
005 | QueryDSL 核心技術 | 全面講解QueryDSL核心技術以及基於SpringBoot整合SpringDataJPA |
006 | SpringDataJPA 核心技術 | 全面講解SpringDataJPA核心技術 |
007 | SpringBoot核心技術學習目錄 | SpringBoot系統的學習目錄,敬請關注點贊!!! |
構建專案
如果之前本地沒有Redis
環境,請訪問第十六章:使用Redis作為SpringBoot專案資料快取文章閱讀配置,接下來
我們先來建立一個新的SpringBoot
專案,新增本站所使用的依賴,pom.xml
配置檔案如下所示:
...省略部分配置
<dependencies>
<!--spring data jpa依賴新增-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--redis依賴新增-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--web相關依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--資料庫依賴新增-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid依賴新增-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.8</version>
</dependency>
<!--lombok依賴新增-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.44</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--效能測試依賴-->
<dependency>
<groupId>org.databene</groupId>
<artifactId>contiperf</artifactId>
<version>2.3.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
...省略部分配置
複製程式碼
在本章的依賴內我們新增了contiperf
效能測試工具,用於測試分別從資料庫、快取內讀取的效能差異。
配置Redis資訊
我比較喜歡使用yml
檔案方式進行配置,先來刪除之前專案自動建立的application.properties
檔案,新建立一個名為application.yml
的配置檔案,新增Redis
相關的配置資訊到application.yml
檔案內,如下所示:
spring:
application:
name: spring-boot-redis
jpa:
database: mysql
show-sql: true
datasource:
druid:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/test
# 配置Redis的連線密碼
redis:
password: hengyuboy
複製程式碼
由於Redis
有很多預設的配置,預設連線localhost
上的Redis
,我們這裡僅僅配置連線的密碼就可以了,其他的都使用預設的配置。
開啟快取
我們找到建立的XxxApplication
入口程式類,在該類上新增@EnableCaching
註解完成開啟快取,如下所示:
/**
* spring-boot-redis整合專案啟動類入口
*
* @author yuqiyu
* @EnableCaching 註解配置啟用快取,自動配置配置檔案的配置資訊進行條件注入快取所需例項
*/
@SpringBootApplication
@EnableCaching
public class SpringBootRedisApplication {
}
複製程式碼
測試
到現在我們的快取已經配置完成了,是不是比之前SpringBoot1.x.x
版本的時候要簡單很多,當然如果你有一些額外的自定義配置也是可以很簡單的整合。
我們本章使用的資料讀取是SpringDataJPA
,如果你之前並沒有使用過SpringDataJPA
請訪問第十三章:SpringBoot實戰SpringDataJPA來閱讀學習。
測試新增快取
我們先來建立一個查詢方法完成簡單的資料快取,方法如下所示:
/**
* 查詢全部使用者
*
* @return
*/
@Cacheable(cacheNames = "user.service.all")
public List<TestUserEntity> findAll() {
return userRepository.findAll();
}
複製程式碼
接下來編寫一個簡單的單元測試,我們直接使用建立專案時建立的測試類,在測試類內新增一個測試方法,如下所示:
/**
* 測試全部快取
*/
@Test
public void findAll() {
userService.findAll();
}
複製程式碼
當我們第一次啟動findAll
測試方法時可以看到控制檯輸出的SQL
,如下所示:
Hibernate: select testuseren0_.ui_id as ui_id1_0_, testuseren0_.ui_age as ui_age2_0_, testuseren0_.ui_name as ui_name3_0_, testuseren0_.ui_password as ui_passw4_0_ from test_user_info testuseren0_
複製程式碼
本次的資料是從資料庫內查詢到的,接下來我們再次執行 findAll
方法來看下控制檯,這時我們並沒有看到輸出的SQL
,證明本次的資料是從Redis
快取內讀取得到的。
效能測試
我們在pom.xml
配置檔案內已經新增了效能測試的依賴contiperf
,那麼下面我們來測試下從 Redis
內讀取資料與 資料庫
內讀取輸出的效能差異。
@Rule
public ContiPerfRule i = new ContiPerfRule();
/**
* 效能測試
* 10萬次查詢,100個執行緒同時操作findAll方法
*/
@Test
@PerfTest(invocations = 100000, threads = 100)
public void contextLoads() {
userService.findAll();
}
複製程式碼
我們的測試是查詢10萬
次,並且開啟100
個執行緒來完成這個測試方法,我們先來測試使用快取的效能,如下圖所示:
這是contiperf
執行生成的資料統計,當我們執行效能測試方法完成後,contiperf
就會自動在target->contiperf-report
下自動生成一個index.html
來統計本次執行的狀況。
我們使用Redis
快取時一共耗時23秒
,下面我們把@Cacheable(cacheNames = "user.service.all")
註解註釋掉,再來執行一遍效能測試方法。
我們在執行測試的時候可以看到控制檯的查詢SQL
在不停的輸出,這也證明了我們的資料是直接從資料庫內獲取的,測試結果如下圖所示:
從上圖內可以看到一共耗時:43秒
,效果已經很明顯了,當然我這是本機模擬測試,如果是讀取正在大併發高IO讀取的伺服器上時差距會更大。
總結
本章主要講解了SpringBoot2.0
版本如何快速的整合Redis
。
第一步:新增spring-boot-starter-data-redis依賴
第二步:配置@EnableCaching開啟快取
第三步:在application.yml內配置Redis相關的資訊
第四步:配置@Cacheable註解完成資料快取
複製程式碼
本章原始碼已經上傳到碼雲:
SpringBoot配套原始碼地址:gitee.com/hengboy/spr…
SpringCloud配套原始碼地址:gitee.com/hengboy/spr…
SpringBoot相關係列文章請訪問:目錄:SpringBoot學習目錄
QueryDSL相關係列文章請訪問:QueryDSL通用查詢框架學習目錄
SpringDataJPA相關係列文章請訪問:目錄:SpringDataJPA學習目錄,感謝閱讀!
歡迎加入QQ技術交流群,共同進步。