這篇文章主要為大家詳細介紹了redis在java web中的應用,文中示例介紹的非常詳細,圖文詳解容易學習,非常適合初學者入門,感興趣的小伙伴們可以參考一下。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:申請域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設、靈川網(wǎng)站維護、網(wǎng)站推廣。一般而言Redis在Java Web 應用中存在兩個主要的場景,一個是緩存常用的數(shù)據(jù),另一個是在需要高速讀/寫的場合使用它快速讀/寫,比如一些需要進行商品搶購和搶紅包的場合。
由于在高并發(fā)的情況下,需要對數(shù)據(jù)進行高速讀/寫的場景,一個最為核心的問題是數(shù)據(jù)一致性和訪問控制。
緩存
在對數(shù)據(jù)庫的讀/寫操作中,現(xiàn)實的情況是讀操作的次數(shù)遠超寫操作,一般是 1:9 到 3:7 的比例,所以需要讀的可能性是比寫的可能性多得多。
當發(fā)送 SQL 去數(shù)據(jù)庫進行讀取時,數(shù)據(jù)庫就會去磁盤把對應的數(shù)據(jù)索引回來,而索引磁盤是一個相對緩慢的過程。如果把數(shù)據(jù)直接放在運行在內(nèi)存中的 Redis 服務器上,那么不需要去讀/寫磁盤了,而是直接讀取內(nèi)存,顯然速度會快得多,并且會極大減輕數(shù)據(jù)庫的壓力。
而使用內(nèi)存進行存儲數(shù)據(jù)開銷也是比較大的,因為磁盤可以是 TGB 級別,而且十分廉價,內(nèi)存一般是幾百個 GB 就相當了不起了,所以內(nèi)存雖然高效但空間有限,價格也比磁盤高許多,因此使用內(nèi)存代價較高,并不是想存什么就存什么,因此我們應該考慮有條件的存儲數(shù)據(jù)。
一般而言,存儲一些常用的數(shù)據(jù),比如用戶登錄的信息;一些主要的業(yè)務信息,比如銀行會存儲一些客戶基礎信息、銀行卡信息、最近交易信息等。一般而言在使用 Redis 存儲的時候,需要從 3 個方面進行考慮。
業(yè)務數(shù)據(jù)常用嗎?命中率如何?如果命中率很低,就沒有必要寫入緩存。該業(yè)務數(shù)據(jù)是讀操作多,還是寫操作多,如果寫操作多,頻繁需要寫入數(shù)據(jù)庫,也沒有必要使用緩存。業(yè)務數(shù)據(jù)大小如何?如果要存儲幾百兆字節(jié)的文件,會給緩存帶來很大的壓力,有沒有必要?
在考慮過這些問題后,如果覺得有必要使用緩存,那么就使用它。使用 Redis 作為緩存的讀取邏輯如圖 1 所示。
從圖 1 中可以知道以下兩點。
當?shù)谝淮巫x取數(shù)據(jù)的時候,讀取 Redis 的數(shù)據(jù)就會失敗,此時會觸發(fā)程序讀取數(shù)據(jù)庫,把數(shù)據(jù)讀取出來,并且寫入 Redis。
當?shù)诙渭耙院笞x取數(shù)據(jù)時,就直接讀取 Redis,讀到數(shù)據(jù)后就結束了流程,這樣速度就大大提高了。
從上面的分析可知,大部分的操作是讀操作,使用 Redis 應對讀操作,速度就會十分迅速,同時也降低了對數(shù)據(jù)庫的依賴,大大降低了數(shù)據(jù)庫的負擔。
分析了讀操作的邏輯后,下面再來分析寫操作的流程,如圖 2 所示。
從流程可以看出,更新或者寫入的操作,需要多個 Redis 的操作。如果業(yè)務數(shù)據(jù)寫次數(shù)遠大于讀次數(shù)沒有必要使用 Redis。
如果是讀次數(shù)遠大于寫次數(shù),則使用 Redis 就有其價值了,因為寫入 Redis 雖然要消耗一定的代價,但是其性能良好,相對數(shù)據(jù)庫而言,幾乎可以忽略不計。
高速讀/寫場合
在互聯(lián)網(wǎng)的應用中,往往存在一些需要高速讀/寫的場合,比如商品的秒殺,搶紅包,淘寶、京東的雙十一活動或者春運搶票等。
以上這類場合在一個瞬間成千上萬的請求就會達到服務器,如果使用的是數(shù)據(jù)庫,一個瞬間數(shù)據(jù)庫就需要執(zhí)行成千上萬的 SQL,很容易造成數(shù)據(jù)庫的瓶頸,嚴重的會導致數(shù)據(jù)庫癱瘓,造成 Java Web 系統(tǒng)服務崩潰。
在這樣的場合的應對辦法往往是考慮異步寫入數(shù)據(jù)庫,而在高速讀/寫的場合中單單使用 Redis 去應對,把這些需要高速讀/寫的數(shù)據(jù),緩存到 Redis 中,而在滿足一定的條件下,觸發(fā)這些緩存的數(shù)據(jù)寫入數(shù)據(jù)庫中。先看看一次請求操作的流程圖,如圖 3 所示。
以上就是如何redis在java web中的應用的簡略介紹,詳細使用情況還需要大家自己使用過才能領會。如果想了解更多,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。