第十六章:使用Redis作為SpringBoot項(xiàng)目數(shù)據(jù)緩存

我們平時(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所示:

圖1

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

圖2

開啟Redis

解壓完成后我們來開啟Redis數(shù)據(jù)庫(kù)档悠,Redis數(shù)據(jù)庫(kù)的默認(rèn)端口是6379,如果已經(jīng)被其他應(yīng)用程序占用望浩,請(qǐng)自行修改redis.windows.conf配置文件辖所,修改位置如下圖3所示:

圖3

如果沒有端口沒有被占用,我們需要在cmd命令窗口執(zhí)行運(yùn)行Redis磨德,我們首先使用cmd命令進(jìn)入到Redis解壓目錄并且執(zhí)行redis-server.exe redis.windows.conf命令即可缘回,如下圖4所示:

圖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所示:

圖5

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

圖6

自行修改本地的數(shù)據(jù)庫(kù)連接池的連接地址诚啃、用戶名郁妈、密碼就可以了。這個(gè)配置是我本地的绍申!

配置支持Redis

構(gòu)建完成后我們需要讓我們的SpringBoot項(xiàng)目支持Redis數(shù)據(jù)庫(kù)才能完成緩存的操作。

添加Redis依賴

我們打開pom.xml配置文件添加對(duì)應(yīng)的redis緩存依賴maven配置顾彰,如下圖7所示:

圖7

我們添加緩存的支持需要兩個(gè)依賴极阅,一個(gè)是SpringBoot內(nèi)部的緩存配置、另外則是我們的redis緩存涨享。

配置Redis數(shù)據(jù)庫(kù)

依賴添加完成后筋搏,需要配置我們本地的redis數(shù)據(jù)庫(kù)連接到項(xiàng)目中,我們打開application.yml配置文件添加如下圖8所示的配置內(nèi)容:

圖8

配置CacheManager

下面我們需要讓SpringBoot內(nèi)置的緩存框架使用我們的Redis作為新的緩存厕隧,我們來添加一個(gè)RedisConfiguration的配置類奔脐,并添加對(duì)應(yīng)的配置如下圖9所示:

圖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所示:

圖10

表內(nèi)就是幾個(gè)簡(jiǎn)單的測(cè)試字段橄维,下面我們根據(jù)對(duì)應(yīng)的字段創(chuàng)建UserEntity,代碼如下圖11所示:

圖11

截圖省略了getter/setter拴曲,請(qǐng)自行添加上争舞。下面我們根據(jù)UserEntity創(chuàng)建一個(gè)SpringDataJPA支持的JPA接口,(如需了解SpringDataJPA請(qǐng)?jiān)L問:第十三章:SpringBoot實(shí)戰(zhàn)SpringDataJPA)接口代碼如下圖12所示:

圖12

創(chuàng)建JPA完成后澈灼,我們對(duì)應(yīng)的創(chuàng)建一個(gè)業(yè)務(wù)邏輯服務(wù)類:UserService竞川,我們?cè)赟ervice內(nèi)添加redis的緩存支持,如下圖13所示:

圖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所示:

圖14

好了革砸,下面我們來啟動(dòng)項(xiàng)目訪問地址查看效果除秀。

測(cè)試Redis

運(yùn)行項(xiàng)目并查看控制臺(tái)輸出的日志是否存在異常,啟動(dòng)成功后訪問地址:127.0.0.1:8080/list算利,界面輸出內(nèi)容如下圖15所示:

圖15

數(shù)據(jù)為測(cè)試數(shù)據(jù)册踩,在啟動(dòng)項(xiàng)目之前需要手動(dòng)添加到數(shù)據(jù)庫(kù)。我們?cè)賮砜聪驴刂婆_(tái)輸出的SQL效拭,如下圖16所示:

圖16

可以看到是正常的訪問數(shù)據(jù)庫(kù)并且執(zhí)行了JPA自動(dòng)生成的SQL暂吉,那么為了驗(yàn)證Redis緩存,我們?cè)賮碚?qǐng)求依次列表缎患,界面輸出內(nèi)容如下圖17所示:

圖17

可以看到我們同樣是可以訪問到數(shù)據(jù)的慕的,而且跟上次訪問列表的數(shù)據(jù)一致,那么神奇的地方來了挤渔,我們?nèi)タ聪驴刂婆_(tái)的SQL輸出肮街,如下圖18所示:

圖18

可以看到只有一次輸出,這個(gè)輸出還是我們上次訪問的時(shí)候執(zhí)行的判导,證明我們配置的Redis緩存已經(jīng)生效嫉父,下面我們使用Redis的客戶端來查看下是否已經(jīng)存在。

使用Redis-Cli客戶端

我們使用Cmd命令進(jìn)入我們的Redis解壓目錄眼刃,并執(zhí)行redis-cli.exe應(yīng)用程序绕辖,效果如下圖19所示:

圖19

可以看到Redis為我們自動(dòng)生成的Key讓我們很無奈,根本看不懂擂红!那我們以后維護(hù)起來就很復(fù)雜了引镊。下面我們來自定義Redis生成Key的規(guī)則!

自定義Key

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

圖20

如上圖20所述涉茧,我們根據(jù)類名赴恨、方法名、參數(shù)列表等完成自定義Redis緩存的Key定義伴栓,下面我們重啟下項(xiàng)目伦连,兩次訪問127.0.0.1:8080/list地址查看界面輸出雨饺,如下圖21所示:

圖21

可以看到跟我們之前一樣,第一次放了數(shù)據(jù)庫(kù)惑淳,第二次查詢了緩存數(shù)據(jù)额港,我們?cè)賮硗ㄟ^redis-cli客戶端查看下數(shù)據(jù)庫(kù)內(nèi)保存的key是否已經(jīng)按照我們自定義規(guī)則生成。如下圖22所示:

圖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í)星球 - 恒宇少年

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市硫朦,隨后出現(xiàn)的幾起案子贷腕,更是在濱河造成了極大的恐慌,老刑警劉巖咬展,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泽裳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡破婆,警方通過查閱死者的電腦和手機(jī)涮总,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祷舀,“玉大人瀑梗,你說我怎么就攤上這事烹笔。” “怎么了抛丽?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵谤职,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我亿鲜,道長(zhǎng)允蜈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任狡门,我火速辦了婚禮陷寝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘其馏。我一直安慰自己凤跑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布叛复。 她就那樣靜靜地躺著仔引,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褐奥。 梳的紋絲不亂的頭發(fā)上粗仓,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音摩渺,去河邊找鬼掰吕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呜笑,可吹牛的內(nèi)容都是我干的夫否。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼叫胁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼凰慈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驼鹅,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤微谓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后输钩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豺型,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年买乃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了触创。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡为牍,死狀恐怖哼绑,靈堂內(nèi)的尸體忽然破棺而出岩馍,到底是詐尸還是另有隱情,我是刑警寧澤抖韩,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布蛀恩,位于F島的核電站,受9級(jí)特大地震影響茂浮,放射性物質(zhì)發(fā)生泄漏双谆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一席揽、第九天 我趴在偏房一處隱蔽的房頂上張望顽馋。 院中可真熱鬧,春花似錦幌羞、人聲如沸寸谜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)熊痴。三九已至,卻和暖如春聂宾,著一層夾襖步出監(jiān)牢的瞬間果善,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工系谐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巾陕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓纪他,卻偏偏與公主長(zhǎng)得像鄙煤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子止喷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容