我們平時(shí)在項(xiàng)目中設(shè)計(jì)數(shù)據(jù)訪問的時(shí)候往往都是采用直接訪問數(shù)據(jù)庫(kù)球恤,采用數(shù)據(jù)庫(kù)連接池來實(shí)現(xiàn)肿轨,但是如果我們的項(xiàng)目訪問量過大或者訪問過于頻繁茧球,將會(huì)對(duì)我們的數(shù)據(jù)庫(kù)帶來很大的壓力便监。為了解決這個(gè)問題從而redis數(shù)據(jù)庫(kù)脫穎而出晶府,redis數(shù)據(jù)庫(kù)出現(xiàn)時(shí)是以非關(guān)系數(shù)據(jù)庫(kù)的光環(huán)展示在廣大程序猿的面前的桂躏,后來redis的迭代版本支持了緩存數(shù)據(jù)、登錄session狀態(tài)(分布式session共享)等川陆。所以又被作為內(nèi)存緩存的形式應(yīng)用到大型企業(yè)級(jí)項(xiàng)目中剂习。
免費(fèi)專題文章匯總
恒宇少年在博客整理出來了SpringBoot、ApiBoot较沪、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】鳞绕,【SpringCloud基礎(chǔ)教程專題】,【ApiBoot組件使用專題】
本章目標(biāo)
實(shí)現(xiàn)SpringBoot項(xiàng)目中整合Redis非關(guān)系數(shù)據(jù)庫(kù)作為內(nèi)存緩存框架尸曼,并測(cè)試數(shù)據(jù)讀取源们何。
安裝Redis
官網(wǎng)的redis僅支持Linux服務(wù)器的安裝版本,由于開發(fā)人員都是在windows上工作控轿,所以GitHub上的牛人基于linux平臺(tái)下的Redis實(shí)現(xiàn)了windows版本垂蜗。
下載Windows版本Redis
我們直接訪問github網(wǎng)址:github.com/MSOpenTech/redis/releases,下載最新的windows X64版本的壓縮包解幽,如下圖1所示:
我們下載第二個(gè)就可以了贴见,第一個(gè)是安裝程序方式可以直接安裝不過不太喜歡那種形式,第二個(gè)則是壓縮包的形式解壓完就可以用躲株,第三片部、四個(gè)都是源碼文件。下載完成后隨便解壓到我們的盤符內(nèi)的文件即可霜定,如下圖2所示:
開啟Redis
解壓完成后我們來開啟Redis數(shù)據(jù)庫(kù)档悠,Redis數(shù)據(jù)庫(kù)的默認(rèn)端口是6379,如果已經(jīng)被其他應(yīng)用程序占用望浩,請(qǐng)自行修改redis.windows.conf配置文件辖所,修改位置如下圖3所示:
如果沒有端口沒有被占用,我們需要在cmd命令窗口執(zhí)行運(yùn)行Redis磨德,我們首先使用cmd命令進(jìn)入到Redis解壓目錄并且執(zhí)行redis-server.exe redis.windows.conf命令即可缘回,如下圖4所示:
可以看到上述圖4吆视,我們的redis數(shù)據(jù)庫(kù)已經(jīng)啟動(dòng)了,下面輸出日志開啟了服務(wù)鏈接在6379端口酥宴。好了我們的數(shù)據(jù)庫(kù)已經(jīng)配置完成了啦吧,接下來我們來構(gòu)建SpringBoot整合Redis項(xiàng)目。
構(gòu)建項(xiàng)目
我們使用IntelliJ IDEA工具構(gòu)建一個(gè)SpringBoot項(xiàng)目拙寡,預(yù)先添加依賴Web授滓、MySQL、JPA肆糕、Druid等般堆。項(xiàng)目結(jié)構(gòu)如下圖5所示:
接下來復(fù)制第十三章:SpringBoot實(shí)戰(zhàn)SpringDataJPA文章項(xiàng)目源碼(源碼地址:git.oschina.net/jnyqy/lessons)的application.yml配置文件到本章節(jié)項(xiàng)目的resources目錄下,如下圖6所示:
自行修改本地的數(shù)據(jù)庫(kù)連接池的連接地址诚啃、用戶名郁妈、密碼就可以了。這個(gè)配置是我本地的绍申!
配置支持Redis
構(gòu)建完成后我們需要讓我們的SpringBoot項(xiàng)目支持Redis數(shù)據(jù)庫(kù)才能完成緩存的操作。
添加Redis依賴
我們打開pom.xml配置文件添加對(duì)應(yīng)的redis緩存依賴maven配置顾彰,如下圖7所示:
我們添加緩存的支持需要兩個(gè)依賴极阅,一個(gè)是SpringBoot內(nèi)部的緩存配置、另外則是我們的redis緩存涨享。
配置Redis數(shù)據(jù)庫(kù)
依賴添加完成后筋搏,需要配置我們本地的redis數(shù)據(jù)庫(kù)連接到項(xiàng)目中,我們打開application.yml配置文件添加如下圖8所示的配置內(nèi)容:
配置CacheManager
下面我們需要讓SpringBoot內(nèi)置的緩存框架使用我們的Redis作為新的緩存厕隧,我們來添加一個(gè)RedisConfiguration的配置類奔脐,并添加對(duì)應(yīng)的配置如下圖9所示:
我們使用@EnableCaching注解來開啟我們的項(xiàng)目支持緩存,我們?cè)谂渲妙悆?nèi)添加了方法cacheManager()吁讨,方法的返回值則是使用了我們的Redis緩存的管理器髓迎,SpringBoot項(xiàng)目啟動(dòng)時(shí)就會(huì)去找自定義配置的CacheManager對(duì)象并且自動(dòng)應(yīng)用到項(xiàng)目中。
上述就是有關(guān)Redis的所有配置建丧,現(xiàn)在我們來編寫一個(gè)測(cè)試的請(qǐng)求讀取數(shù)據(jù)庫(kù)內(nèi)的單表數(shù)據(jù)排龄,查看是否已經(jīng)可以緩存數(shù)據(jù)。
使用Redis
我們現(xiàn)在我們本地的MySQL數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建一張表結(jié)構(gòu)翎朱,如下圖10所示:
表內(nèi)就是幾個(gè)簡(jiǎn)單的測(cè)試字段橄维,下面我們根據(jù)對(duì)應(yīng)的字段創(chuàng)建UserEntity,代碼如下圖11所示:
截圖省略了getter/setter拴曲,請(qǐng)自行添加上争舞。下面我們根據(jù)UserEntity創(chuàng)建一個(gè)SpringDataJPA支持的JPA接口,(如需了解SpringDataJPA請(qǐng)?jiān)L問:第十三章:SpringBoot實(shí)戰(zhàn)SpringDataJPA)接口代碼如下圖12所示:
創(chuàng)建JPA完成后澈灼,我們對(duì)應(yīng)的創(chuàng)建一個(gè)業(yè)務(wù)邏輯服務(wù)類:UserService竞川,我們?cè)赟ervice內(nèi)添加redis的緩存支持,如下圖13所示:
在上圖13內(nèi)有兩個(gè)新的注解,
@CacheConfig:該注解是用來開啟聲明的類參與緩存,如果方法內(nèi)的@Cacheable注解沒有添加key值流译,那么會(huì)自動(dòng)使用cahceNames配置參數(shù)并且追加方法名逞怨。
@Cacheable:配置方法的緩存參數(shù),可自定義緩存的key以及value福澡。
再來添加一個(gè)名叫UserController的控制器叠赦,使用@RestController風(fēng)格注解。如下圖14所示:
好了革砸,下面我們來啟動(dòng)項(xiàng)目訪問地址查看效果除秀。
測(cè)試Redis
運(yùn)行項(xiàng)目并查看控制臺(tái)輸出的日志是否存在異常,啟動(dòng)成功后訪問地址:127.0.0.1:8080/list算利,界面輸出內(nèi)容如下圖15所示:
數(shù)據(jù)為測(cè)試數(shù)據(jù)册踩,在啟動(dòng)項(xiàng)目之前需要手動(dòng)添加到數(shù)據(jù)庫(kù)。我們?cè)賮砜聪驴刂婆_(tái)輸出的SQL效拭,如下圖16所示:
可以看到是正常的訪問數(shù)據(jù)庫(kù)并且執(zhí)行了JPA自動(dòng)生成的SQL暂吉,那么為了驗(yàn)證Redis緩存,我們?cè)賮碚?qǐng)求依次列表缎患,界面輸出內(nèi)容如下圖17所示:
可以看到我們同樣是可以訪問到數(shù)據(jù)的慕的,而且跟上次訪問列表的數(shù)據(jù)一致,那么神奇的地方來了挤渔,我們?nèi)タ聪驴刂婆_(tái)的SQL輸出肮街,如下圖18所示:
可以看到只有一次輸出,這個(gè)輸出還是我們上次訪問的時(shí)候執(zhí)行的判导,證明我們配置的Redis緩存已經(jīng)生效嫉父,下面我們使用Redis的客戶端來查看下是否已經(jīng)存在。
使用Redis-Cli客戶端
我們使用Cmd命令進(jìn)入我們的Redis解壓目錄眼刃,并執(zhí)行redis-cli.exe應(yīng)用程序绕辖,效果如下圖19所示:
可以看到Redis為我們自動(dòng)生成的Key讓我們很無奈,根本看不懂擂红!那我們以后維護(hù)起來就很復(fù)雜了引镊。下面我們來自定義Redis生成Key的規(guī)則!
自定義Key
我們打開RedisConfiguration配置類篮条,添加繼承CachingConfigurerSupport類弟头,并重寫方法keyGenerator(),代碼如下圖20所示:
如上圖20所述涉茧,我們根據(jù)類名赴恨、方法名、參數(shù)列表等完成自定義Redis緩存的Key定義伴栓,下面我們重啟下項(xiàng)目伦连,兩次訪問127.0.0.1:8080/list地址查看界面輸出雨饺,如下圖21所示:
可以看到跟我們之前一樣,第一次放了數(shù)據(jù)庫(kù)惑淳,第二次查詢了緩存數(shù)據(jù)额港,我們?cè)賮硗ㄟ^redis-cli客戶端查看下數(shù)據(jù)庫(kù)內(nèi)保存的key是否已經(jīng)按照我們自定義規(guī)則生成。如下圖22所示:
可以看到第二條歧焦,就是根據(jù)我們規(guī)則生成的key移斩。
Redis命令
Redis數(shù)據(jù)庫(kù)內(nèi)有很多個(gè)命令下面我簡(jiǎn)單介紹幾個(gè)大家在日常開發(fā)中常用到的。
flushdb:清空當(dāng)前數(shù)據(jù)庫(kù)绢馍。
select [index]:選擇索引數(shù)據(jù)庫(kù)向瓷,index為索引值名,如:select 1舰涌。
del [key]:刪除一條指定key的值猖任。
keys *:查看數(shù)據(jù)庫(kù)內(nèi)所有的key。
flushall:清空所有數(shù)據(jù)庫(kù)瓷耙。
quit:退出客戶端連接朱躺。
總結(jié)
以上所述就是本章的全部講解內(nèi)容,本章主要講解了SpringBoot項(xiàng)目中如何使用Redis非關(guān)系型數(shù)據(jù)庫(kù)作為緩存框架搁痛,并完成自定義Redis生成的key值长搀。
本章所用到的數(shù)據(jù)庫(kù)已經(jīng)放置到resources目錄下,請(qǐng)?jiān)L問碼云下載落追。
本章代碼已經(jīng)上傳到碼云:
SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相關(guān)系列文章請(qǐng)?jiān)L問:目錄:SpringBoot學(xué)習(xí)目錄
QueryDSL相關(guān)系列文章請(qǐng)?jiān)L問:QueryDSL通用查詢框架學(xué)習(xí)目錄
SpringDataJPA相關(guān)系列文章請(qǐng)?jiān)L問:目錄:SpringDataJPA學(xué)習(xí)目錄
SpringBoot相關(guān)文章請(qǐng)?jiān)L問:目錄:SpringBoot學(xué)習(xí)目錄,感謝閱讀涯肩!
歡迎微信掃碼加入知識(shí)星球轿钠,恒宇少年帶你走以后的技術(shù)道路!2∶纭疗垛!
知識(shí)星球 - 恒宇少年