溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis在java web中的應用

發布時間:2020-05-08 14:34:56 來源:億速云 閱讀:807 作者:Leah 欄目:關系型數據庫

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

一般而言Redis在Java Web 應用中存在兩個主要的場景,一個是緩存常用的數據,另一個是在需要高速讀/寫的場合使用它快速讀/寫,比如一些需要進行商品搶購和搶紅包的場合。

redis在java web中的應用
由于在高并發的情況下,需要對數據進行高速讀/寫的場景,一個最為核心的問題是數據一致性和訪問控制。

緩存                      

在對數據庫的讀/寫操作中,現實的情況是讀操作的次數遠超寫操作,一般是 1:9 到 3:7 的比例,所以需要讀的可能性是比寫的可能性多得多。

當發送 SQL 去數據庫進行讀取時,數據庫就會去磁盤把對應的數據索引回來,而索引磁盤是一個相對緩慢的過程。如果把數據直接放在運行在內存中的 Redis 服務器上,那么不需要去讀/寫磁盤了,而是直接讀取內存,顯然速度會快得多,并且會極大減輕數據庫的壓力。

而使用內存進行存儲數據開銷也是比較大的,因為磁盤可以是 TGB 級別,而且十分廉價,內存一般是幾百個 GB 就相當了不起了,所以內存雖然高效但空間有限,價格也比磁盤高許多,因此使用內存代價較高,并不是想存什么就存什么,因此我們應該考慮有條件的存儲數據。

一般而言,存儲一些常用的數據,比如用戶登錄的信息;一些主要的業務信息,比如銀行會存儲一些客戶基礎信息、銀行卡信息、最近交易信息等。一般而言在使用 Redis 存儲的時候,需要從 3 個方面進行考慮。

業務數據常用嗎?命中率如何?如果命中率很低,就沒有必要寫入緩存。該業務數據是讀操作多,還是寫操作多,如果寫操作多,頻繁需要寫入數據庫,也沒有必要使用緩存。業務數據大小如何?如果要存儲幾百兆字節的文件,會給緩存帶來很大的壓力,有沒有必要?

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

redis在java web中的應用

從圖 1 中可以知道以下兩點。

當第一次讀取數據的時候,讀取 Redis 的數據就會失敗,此時會觸發程序讀取數據庫,把數據讀取出來,并且寫入 Redis。

當第二次及以后讀取數據時,就直接讀取 Redis,讀到數據后就結束了流程,這樣速度就大大提高了。

從上面的分析可知,大部分的操作是讀操作,使用 Redis 應對讀操作,速度就會十分迅速,同時也降低了對數據庫的依賴,大大降低了數據庫的負擔。

分析了讀操作的邏輯后,下面再來分析寫操作的流程,如圖 2 所示。

redis在java web中的應用

從流程可以看出,更新或者寫入的操作,需要多個 Redis 的操作。如果業務數據寫次數遠大于讀次數沒有必要使用 Redis。

如果是讀次數遠大于寫次數,則使用 Redis 就有其價值了,因為寫入 Redis 雖然要消耗一定的代價,但是其性能良好,相對數據庫而言,幾乎可以忽略不計。

高速讀/寫場合

在互聯網的應用中,往往存在一些需要高速讀/寫的場合,比如商品的秒殺,搶紅包,淘寶、京東的雙十一活動或者春運搶票等。

以上這類場合在一個瞬間成千上萬的請求就會達到服務器,如果使用的是數據庫,一個瞬間數據庫就需要執行成千上萬的 SQL,很容易造成數據庫的瓶頸,嚴重的會導致數據庫癱瘓,造成 Java Web 系統服務崩潰。

在這樣的場合的應對辦法往往是考慮異步寫入數據庫,而在高速讀/寫的場合中單單使用 Redis 去應對,把這些需要高速讀/寫的數據,緩存到 Redis 中,而在滿足一定的條件下,觸發這些緩存的數據寫入數據庫中。先看看一次請求操作的流程圖,如圖 3 所示。

redis在java web中的應用

以上就是如何redis在java web中的應用的簡略介紹,詳細使用情況還需要大家自己使用過才能領會。如果想了解更多,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女