我們平時在項目中設(shè)計數(shù)據(jù)訪問的時候往往都是采用直接訪問數(shù)據(jù)庫,采用數(shù)據(jù)庫連接池來實現(xiàn),但是如果我們的項目訪問量過大或者訪問過于頻繁,將會對我們的數(shù)據(jù)庫帶來很大的壓力。為了解決這個問題從而redis數(shù)據(jù)庫脫穎而出,redis數(shù)據(jù)庫出現(xiàn)時是以非關(guān)系數(shù)據(jù)庫的光環(huán)展示在廣大程序猿的面前的,后來redis的迭代版本支持了緩存數(shù)據(jù)、登錄session狀態(tài)(分布式session共享)等。所以又被作為內(nèi)存緩存的形式應用到大型企業(yè)級項目中。
免費專題文章匯總
恒宇少年在博客整理出來了SpringBoot、ApiBoot、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】,【SpringCloud基礎(chǔ)教程專題】,【ApiBoot組件使用專題】
本章目標
實現(xiàn)SpringBoot項目中整合Redis非關(guān)系數(shù)據(jù)庫作為內(nèi)存緩存框架,并測試數(shù)據(jù)讀取源。
安裝Redis
官網(wǎng)的redis僅支持Linux服務器的安裝版本,由于開發(fā)人員都是在windows上工作,所以GitHub上的牛人基于linux平臺下的Redis實現(xiàn)了windows版本。
下載Windows版本Redis
我們直接訪問github網(wǎng)址:github.com/MSOpenTech/redis/releases,下載最新的windows X64版本的壓縮包,如下圖1所示:
我們下載第二個就可以了,第一個是安裝程序方式可以直接安裝不過不太喜歡那種形式,第二個則是壓縮包的形式解壓完就可以用,第三、四個都是源碼文件。下載完成后隨便解壓到我們的盤符內(nèi)的文件即可,如下圖2所示:
開啟Redis
解壓完成后我們來開啟Redis數(shù)據(jù)庫,Redis數(shù)據(jù)庫的默認端口是6379,如果已經(jīng)被其他應用程序占用,請自行修改redis.windows.conf配置文件,修改位置如下圖3所示:
如果沒有端口沒有被占用,我們需要在cmd命令窗口執(zhí)行運行Redis,我們首先使用cmd命令進入到Redis解壓目錄并且執(zhí)行redis-server.exe redis.windows.conf命令即可,如下圖4所示:
可以看到上述圖4,我們的redis數(shù)據(jù)庫已經(jīng)啟動了,下面輸出日志開啟了服務鏈接在6379端口。好了我們的數(shù)據(jù)庫已經(jīng)配置完成了,接下來我們來構(gòu)建SpringBoot整合Redis項目。
構(gòu)建項目
我們使用IntelliJ IDEA工具構(gòu)建一個SpringBoot項目,預先添加依賴Web、MySQL、JPA、Druid等。項目結(jié)構(gòu)如下圖5所示:
接下來復制第十三章:SpringBoot實戰(zhàn)SpringDataJPA文章項目源碼(源碼地址:git.oschina.net/jnyqy/lessons)的application.yml配置文件到本章節(jié)項目的resources目錄下,如下圖6所示:
自行修改本地的數(shù)據(jù)庫連接池的連接地址、用戶名、密碼就可以了。這個配置是我本地的!
配置支持Redis
構(gòu)建完成后我們需要讓我們的SpringBoot項目支持Redis數(shù)據(jù)庫才能完成緩存的操作。
添加Redis依賴
我們打開pom.xml配置文件添加對應的redis緩存依賴maven配置,如下圖7所示:
我們添加緩存的支持需要兩個依賴,一個是SpringBoot內(nèi)部的緩存配置、另外則是我們的redis緩存。
配置Redis數(shù)據(jù)庫
依賴添加完成后,需要配置我們本地的redis數(shù)據(jù)庫連接到項目中,我們打開application.yml配置文件添加如下圖8所示的配置內(nèi)容:
配置CacheManager
下面我們需要讓SpringBoot內(nèi)置的緩存框架使用我們的Redis作為新的緩存,我們來添加一個RedisConfiguration的配置類,并添加對應的配置如下圖9所示:
我們使用@EnableCaching注解來開啟我們的項目支持緩存,我們在配置類內(nèi)添加了方法cacheManager(),方法的返回值則是使用了我們的Redis緩存的管理器,SpringBoot項目啟動時就會去找自定義配置的CacheManager對象并且自動應用到項目中。
上述就是有關(guān)Redis的所有配置,現(xiàn)在我們來編寫一個測試的請求讀取數(shù)據(jù)庫內(nèi)的單表數(shù)據(jù),查看是否已經(jīng)可以緩存數(shù)據(jù)。
使用Redis
我們現(xiàn)在我們本地的MySQL數(shù)據(jù)庫內(nèi)創(chuàng)建一張表結(jié)構(gòu),如下圖10所示:
表內(nèi)就是幾個簡單的測試字段,下面我們根據(jù)對應的字段創(chuàng)建UserEntity,代碼如下圖11所示:
截圖省略了getter/setter,請自行添加上。下面我們根據(jù)UserEntity創(chuàng)建一個SpringDataJPA支持的JPA接口,(如需了解SpringDataJPA請訪問:第十三章:SpringBoot實戰(zhàn)SpringDataJPA)接口代碼如下圖12所示:
創(chuàng)建JPA完成后,我們對應的創(chuàng)建一個業(yè)務邏輯服務類:UserService,我們在Service內(nèi)添加redis的緩存支持,如下圖13所示:
在上圖13內(nèi)有兩個新的注解,
@CacheConfig:該注解是用來開啟聲明的類參與緩存,如果方法內(nèi)的@Cacheable注解沒有添加key值,那么會自動使用cahceNames配置參數(shù)并且追加方法名。
@Cacheable:配置方法的緩存參數(shù),可自定義緩存的key以及value。
再來添加一個名叫UserController的控制器,使用@RestController風格注解。如下圖14所示:
好了,下面我們來啟動項目訪問地址查看效果。
測試Redis
運行項目并查看控制臺輸出的日志是否存在異常,啟動成功后訪問地址:127.0.0.1:8080/list,界面輸出內(nèi)容如下圖15所示:
數(shù)據(jù)為測試數(shù)據(jù),在啟動項目之前需要手動添加到數(shù)據(jù)庫。我們再來看下控制臺輸出的SQL,如下圖16所示:
可以看到是正常的訪問數(shù)據(jù)庫并且執(zhí)行了JPA自動生成的SQL,那么為了驗證Redis緩存,我們再來請求依次列表,界面輸出內(nèi)容如下圖17所示:
可以看到我們同樣是可以訪問到數(shù)據(jù)的,而且跟上次訪問列表的數(shù)據(jù)一致,那么神奇的地方來了,我們?nèi)タ聪驴刂婆_的SQL輸出,如下圖18所示:
可以看到只有一次輸出,這個輸出還是我們上次訪問的時候執(zhí)行的,證明我們配置的Redis緩存已經(jīng)生效,下面我們使用Redis的客戶端來查看下是否已經(jīng)存在。
使用Redis-Cli客戶端
我們使用Cmd命令進入我們的Redis解壓目錄,并執(zhí)行redis-cli.exe應用程序,效果如下圖19所示:
可以看到Redis為我們自動生成的Key讓我們很無奈,根本看不懂!那我們以后維護起來就很復雜了。下面我們來自定義Redis生成Key的規(guī)則!
自定義Key
我們打開RedisConfiguration配置類,添加繼承CachingConfigurerSupport類,并重寫方法keyGenerator(),代碼如下圖20所示:
如上圖20所述,我們根據(jù)類名、方法名、參數(shù)列表等完成自定義Redis緩存的Key定義,下面我們重啟下項目,兩次訪問127.0.0.1:8080/list地址查看界面輸出,如下圖21所示:
可以看到跟我們之前一樣,第一次放了數(shù)據(jù)庫,第二次查詢了緩存數(shù)據(jù),我們再來通過redis-cli客戶端查看下數(shù)據(jù)庫內(nèi)保存的key是否已經(jīng)按照我們自定義規(guī)則生成。如下圖22所示:
可以看到第二條,就是根據(jù)我們規(guī)則生成的key。
Redis命令
Redis數(shù)據(jù)庫內(nèi)有很多個命令下面我簡單介紹幾個大家在日常開發(fā)中常用到的。
flushdb:清空當前數(shù)據(jù)庫。
select [index]:選擇索引數(shù)據(jù)庫,index為索引值名,如:select 1。
del [key]:刪除一條指定key的值。
keys *:查看數(shù)據(jù)庫內(nèi)所有的key。
flushall:清空所有數(shù)據(jù)庫。
quit:退出客戶端連接。
總結(jié)
以上所述就是本章的全部講解內(nèi)容,本章主要講解了SpringBoot項目中如何使用Redis非關(guān)系型數(shù)據(jù)庫作為緩存框架,并完成自定義Redis生成的key值。
本章所用到的數(shù)據(jù)庫已經(jīng)放置到resources目錄下,請訪問碼云下載。
本章代碼已經(jīng)上傳到碼云:
SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相關(guān)系列文章請訪問:目錄:SpringBoot學習目錄
QueryDSL相關(guān)系列文章請訪問:QueryDSL通用查詢框架學習目錄
SpringDataJPA相關(guān)系列文章請訪問:目錄:SpringDataJPA學習目錄
SpringBoot相關(guān)文章請訪問:目錄:SpringBoot學習目錄,感謝閱讀!
歡迎微信掃碼加入知識星球,恒宇少年帶你走以后的技術(shù)道路!!!
知識星球 - 恒宇少年