溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

redis在java web中的應(yīng)用

發(fā)布時(shí)間:2020-05-08 14:34:56 來(lái)源:億速云 閱讀:758 作者:Leah 欄目:關(guān)系型數(shù)據(jù)庫(kù)

這篇文章主要為大家詳細(xì)介紹了redis在java web中的應(yīng)用,文中示例介紹的非常詳細(xì),圖文詳解容易學(xué)習(xí),非常適合初學(xué)者入門,感興趣的小伙伴們可以參考一下。

一般而言Redis在Java Web 應(yīng)用中存在兩個(gè)主要的場(chǎng)景,一個(gè)是緩存常用的數(shù)據(jù),另一個(gè)是在需要高速讀/寫(xiě)的場(chǎng)合使用它快速讀/寫(xiě),比如一些需要進(jìn)行商品搶購(gòu)和搶紅包的場(chǎng)合。

redis在java web中的應(yīng)用
由于在高并發(fā)的情況下,需要對(duì)數(shù)據(jù)進(jìn)行高速讀/寫(xiě)的場(chǎng)景,一個(gè)最為核心的問(wèn)題是數(shù)據(jù)一致性和訪問(wèn)控制。

緩存                      

在對(duì)數(shù)據(jù)庫(kù)的讀/寫(xiě)操作中,現(xiàn)實(shí)的情況是讀操作的次數(shù)遠(yuǎn)超寫(xiě)操作,一般是 1:9 到 3:7 的比例,所以需要讀的可能性是比寫(xiě)的可能性多得多。

當(dāng)發(fā)送 SQL 去數(shù)據(jù)庫(kù)進(jìn)行讀取時(shí),數(shù)據(jù)庫(kù)就會(huì)去磁盤把對(duì)應(yīng)的數(shù)據(jù)索引回來(lái),而索引磁盤是一個(gè)相對(duì)緩慢的過(guò)程。如果把數(shù)據(jù)直接放在運(yùn)行在內(nèi)存中的 Redis 服務(wù)器上,那么不需要去讀/寫(xiě)磁盤了,而是直接讀取內(nèi)存,顯然速度會(huì)快得多,并且會(huì)極大減輕數(shù)據(jù)庫(kù)的壓力。

而使用內(nèi)存進(jìn)行存儲(chǔ)數(shù)據(jù)開(kāi)銷也是比較大的,因?yàn)榇疟P可以是 TGB 級(jí)別,而且十分廉價(jià),內(nèi)存一般是幾百個(gè) GB 就相當(dāng)了不起了,所以內(nèi)存雖然高效但空間有限,價(jià)格也比磁盤高許多,因此使用內(nèi)存代價(jià)較高,并不是想存什么就存什么,因此我們應(yīng)該考慮有條件的存儲(chǔ)數(shù)據(jù)。

一般而言,存儲(chǔ)一些常用的數(shù)據(jù),比如用戶登錄的信息;一些主要的業(yè)務(wù)信息,比如銀行會(huì)存儲(chǔ)一些客戶基礎(chǔ)信息、銀行卡信息、最近交易信息等。一般而言在使用 Redis 存儲(chǔ)的時(shí)候,需要從 3 個(gè)方面進(jìn)行考慮。

業(yè)務(wù)數(shù)據(jù)常用嗎?命中率如何?如果命中率很低,就沒(méi)有必要寫(xiě)入緩存。該業(yè)務(wù)數(shù)據(jù)是讀操作多,還是寫(xiě)操作多,如果寫(xiě)操作多,頻繁需要寫(xiě)入數(shù)據(jù)庫(kù),也沒(méi)有必要使用緩存。業(yè)務(wù)數(shù)據(jù)大小如何?如果要存儲(chǔ)幾百兆字節(jié)的文件,會(huì)給緩存帶來(lái)很大的壓力,有沒(méi)有必要?

在考慮過(guò)這些問(wèn)題后,如果覺(jué)得有必要使用緩存,那么就使用它。使用 Redis 作為緩存的讀取邏輯如圖 1 所示。

redis在java web中的應(yīng)用

從圖 1 中可以知道以下兩點(diǎn)。

當(dāng)?shù)谝淮巫x取數(shù)據(jù)的時(shí)候,讀取 Redis 的數(shù)據(jù)就會(huì)失敗,此時(shí)會(huì)觸發(fā)程序讀取數(shù)據(jù)庫(kù),把數(shù)據(jù)讀取出來(lái),并且寫(xiě)入 Redis。

當(dāng)?shù)诙渭耙院笞x取數(shù)據(jù)時(shí),就直接讀取 Redis,讀到數(shù)據(jù)后就結(jié)束了流程,這樣速度就大大提高了。

從上面的分析可知,大部分的操作是讀操作,使用 Redis 應(yīng)對(duì)讀操作,速度就會(huì)十分迅速,同時(shí)也降低了對(duì)數(shù)據(jù)庫(kù)的依賴,大大降低了數(shù)據(jù)庫(kù)的負(fù)擔(dān)。

分析了讀操作的邏輯后,下面再來(lái)分析寫(xiě)操作的流程,如圖 2 所示。

redis在java web中的應(yīng)用

從流程可以看出,更新或者寫(xiě)入的操作,需要多個(gè) Redis 的操作。如果業(yè)務(wù)數(shù)據(jù)寫(xiě)次數(shù)遠(yuǎn)大于讀次數(shù)沒(méi)有必要使用 Redis。

如果是讀次數(shù)遠(yuǎn)大于寫(xiě)次數(shù),則使用 Redis 就有其價(jià)值了,因?yàn)閷?xiě)入 Redis 雖然要消耗一定的代價(jià),但是其性能良好,相對(duì)數(shù)據(jù)庫(kù)而言,幾乎可以忽略不計(jì)。

高速讀/寫(xiě)場(chǎng)合

在互聯(lián)網(wǎng)的應(yīng)用中,往往存在一些需要高速讀/寫(xiě)的場(chǎng)合,比如商品的秒殺,搶紅包,淘寶、京東的雙十一活動(dòng)或者春運(yùn)搶票等。

以上這類場(chǎng)合在一個(gè)瞬間成千上萬(wàn)的請(qǐng)求就會(huì)達(dá)到服務(wù)器,如果使用的是數(shù)據(jù)庫(kù),一個(gè)瞬間數(shù)據(jù)庫(kù)就需要執(zhí)行成千上萬(wàn)的 SQL,很容易造成數(shù)據(jù)庫(kù)的瓶頸,嚴(yán)重的會(huì)導(dǎo)致數(shù)據(jù)庫(kù)癱瘓,造成 Java Web 系統(tǒng)服務(wù)崩潰。

在這樣的場(chǎng)合的應(yīng)對(duì)辦法往往是考慮異步寫(xiě)入數(shù)據(jù)庫(kù),而在高速讀/寫(xiě)的場(chǎng)合中單單使用 Redis 去應(yīng)對(duì),把這些需要高速讀/寫(xiě)的數(shù)據(jù),緩存到 Redis 中,而在滿足一定的條件下,觸發(fā)這些緩存的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)中。先看看一次請(qǐng)求操作的流程圖,如圖 3 所示。

redis在java web中的應(yīng)用

以上就是如何redis在java web中的應(yīng)用的簡(jiǎn)略介紹,詳細(xì)使用情況還需要大家自己使用過(guò)才能領(lǐng)會(huì)。如果想了解更多,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI