第十六章:使用Redis作為SpringBoot項目數據緩存

我們平時在項目中設計數據訪問的時候往往都是采用直接訪問數據庫,采用數據庫連接池來實現,但是如果我們的項目訪問量過大或者訪問過于頻繁,將會對我們的數據庫帶來很大的壓力。為了解決這個問題從而redis數據庫脫穎而出,redis數據庫出現時是以非關系數據庫的光環展示在廣大程序猿的面前的,后來redis的迭代版本支持了緩存數據、登錄session狀態(分布式session共享)等。所以又被作為內存緩存的形式應用到大型企業級項目中。

免費專題文章匯總

恒宇少年在博客整理出來了SpringBoot、ApiBoot、SpringCloud的文章匯總【SpringBoot基礎教程專題】,【SpringCloud基礎教程專題】,【ApiBoot組件使用專題

本章目標

實現SpringBoot項目中整合Redis非關系數據庫作為內存緩存框架,并測試數據讀取源。

安裝Redis

官網的redis僅支持Linux服務器的安裝版本,由于開發人員都是在windows上工作,所以GitHub上的牛人基于linux平臺下的Redis實現了windows版本。

下載Windows版本Redis

我們直接訪問github網址:github.com/MSOpenTech/redis/releases,下載最新的windows X64版本的壓縮包,如下圖1所示:

圖1

我們下載第二個就可以了,第一個是安裝程序方式可以直接安裝不過不太喜歡那種形式,第二個則是壓縮包的形式解壓完就可以用,第三、四個都是源碼文件。下載完成后隨便解壓到我們的盤符內的文件即可,如下圖2所示:

圖2

開啟Redis

解壓完成后我們來開啟Redis數據庫,Redis數據庫的默認端口是6379,如果已經被其他應用程序占用,請自行修改redis.windows.conf配置文件,修改位置如下圖3所示:

圖3

如果沒有端口沒有被占用,我們需要在cmd命令窗口執行運行Redis,我們首先使用cmd命令進入到Redis解壓目錄并且執行redis-server.exe redis.windows.conf命令即可,如下圖4所示:

圖4

可以看到上述圖4,我們的redis數據庫已經啟動了,下面輸出日志開啟了服務鏈接在6379端口。好了我們的數據庫已經配置完成了,接下來我們來構建SpringBoot整合Redis項目。

構建項目

我們使用IntelliJ IDEA工具構建一個SpringBoot項目,預先添加依賴Web、MySQL、JPA、Druid等。項目結構如下圖5所示:

圖5

接下來復制第十三章:SpringBoot實戰SpringDataJPA文章項目源碼(源碼地址:git.oschina.net/jnyqy/lessons)的application.yml配置文件到本章節項目的resources目錄下,如下圖6所示:

圖6

自行修改本地的數據庫連接池的連接地址、用戶名、密碼就可以了。這個配置是我本地的!

配置支持Redis

構建完成后我們需要讓我們的SpringBoot項目支持Redis數據庫才能完成緩存的操作。

添加Redis依賴

我們打開pom.xml配置文件添加對應的redis緩存依賴maven配置,如下圖7所示:

圖7

我們添加緩存的支持需要兩個依賴,一個是SpringBoot內部的緩存配置、另外則是我們的redis緩存。

配置Redis數據庫

依賴添加完成后,需要配置我們本地的redis數據庫連接到項目中,我們打開application.yml配置文件添加如下圖8所示的配置內容:

圖8

配置CacheManager

下面我們需要讓SpringBoot內置的緩存框架使用我們的Redis作為新的緩存,我們來添加一個RedisConfiguration的配置類,并添加對應的配置如下圖9所示:

圖9

我們使用@EnableCaching注解來開啟我們的項目支持緩存,我們在配置類內添加了方法cacheManager(),方法的返回值則是使用了我們的Redis緩存的管理器,SpringBoot項目啟動時就會去找自定義配置的CacheManager對象并且自動應用到項目中。

上述就是有關Redis的所有配置,現在我們來編寫一個測試的請求讀取數據庫內的單表數據,查看是否已經可以緩存數據。

使用Redis

我們現在我們本地的MySQL數據庫內創建一張表結構,如下圖10所示:

圖10

表內就是幾個簡單的測試字段,下面我們根據對應的字段創建UserEntity,代碼如下圖11所示:

圖11

截圖省略了getter/setter,請自行添加上。下面我們根據UserEntity創建一個SpringDataJPA支持的JPA接口,(如需了解SpringDataJPA請訪問:第十三章:SpringBoot實戰SpringDataJPA)接口代碼如下圖12所示:

圖12

創建JPA完成后,我們對應的創建一個業務邏輯服務類:UserService,我們在Service內添加redis的緩存支持,如下圖13所示:

圖13

在上圖13內有兩個新的注解,

@CacheConfig:該注解是用來開啟聲明的類參與緩存,如果方法內的@Cacheable注解沒有添加key值,那么會自動使用cahceNames配置參數并且追加方法名。
@Cacheable:配置方法的緩存參數,可自定義緩存的key以及value。

再來添加一個名叫UserController的控制器,使用@RestController風格注解。如下圖14所示:

圖14

好了,下面我們來啟動項目訪問地址查看效果。

測試Redis

運行項目并查看控制臺輸出的日志是否存在異常,啟動成功后訪問地址:127.0.0.1:8080/list,界面輸出內容如下圖15所示:

圖15

數據為測試數據,在啟動項目之前需要手動添加到數據庫。我們再來看下控制臺輸出的SQL,如下圖16所示:

圖16

可以看到是正常的訪問數據庫并且執行了JPA自動生成的SQL,那么為了驗證Redis緩存,我們再來請求依次列表,界面輸出內容如下圖17所示:

圖17

可以看到我們同樣是可以訪問到數據的,而且跟上次訪問列表的數據一致,那么神奇的地方來了,我們去看下控制臺的SQL輸出,如下圖18所示:

圖18

可以看到只有一次輸出,這個輸出還是我們上次訪問的時候執行的,證明我們配置的Redis緩存已經生效,下面我們使用Redis的客戶端來查看下是否已經存在。

使用Redis-Cli客戶端

我們使用Cmd命令進入我們的Redis解壓目錄,并執行redis-cli.exe應用程序,效果如下圖19所示:

圖19

可以看到Redis為我們自動生成的Key讓我們很無奈,根本看不懂!那我們以后維護起來就很復雜了。下面我們來自定義Redis生成Key的規則!

自定義Key

我們打開RedisConfiguration配置類,添加繼承CachingConfigurerSupport類,并重寫方法keyGenerator(),代碼如下圖20所示:

圖20

如上圖20所述,我們根據類名、方法名、參數列表等完成自定義Redis緩存的Key定義,下面我們重啟下項目,兩次訪問127.0.0.1:8080/list地址查看界面輸出,如下圖21所示:

圖21

可以看到跟我們之前一樣,第一次放了數據庫,第二次查詢了緩存數據,我們再來通過redis-cli客戶端查看下數據庫內保存的key是否已經按照我們自定義規則生成。如下圖22所示:

圖22

可以看到第二條,就是根據我們規則生成的key。

Redis命令

Redis數據庫內有很多個命令下面我簡單介紹幾個大家在日常開發中常用到的。

flushdb:清空當前數據庫。
select [index]:選擇索引數據庫,index為索引值名,如:select 1。
del [key]:刪除一條指定key的值。
keys *:查看數據庫內所有的key。
flushall:清空所有數據庫。
quit:退出客戶端連接。

總結

以上所述就是本章的全部講解內容,本章主要講解了SpringBoot項目中如何使用Redis非關系型數據庫作為緩存框架,并完成自定義Redis生成的key值。

本章所用到的數據庫已經放置到resources目錄下,請訪問碼云下載。

本章代碼已經上傳到碼云:

SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter

SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter

SpringBoot相關系列文章請訪問:目錄:SpringBoot學習目錄

QueryDSL相關系列文章請訪問:QueryDSL通用查詢框架學習目錄

SpringDataJPA相關系列文章請訪問:目錄:SpringDataJPA學習目錄

SpringBoot相關文章請訪問:目錄:SpringBoot學習目錄,感謝閱讀!

歡迎微信掃碼加入知識星球,恒宇少年帶你走以后的技術道路!!!

知識星球 - 恒宇少年

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容