redis是一款高效能的記憶體型鍵值對(key-value)資料庫,是大型**和幾乎所有高併發場景必備的中介軟體,主要用於快取熱點資料,從而大大減輕了後端資料庫的請求壓力,但是因為redis把所有資料都儲存在記憶體中,所以,在把redis用做快取的過程中,常常會遇到以下的一些問題,例如快取更新、快取雪崩、快取穿透、快取擊穿、快取替換等。
一、快取更新
快取更新的策略有很多,這裡介紹兩種比較主要的情況:
第一種情況,先更新資料庫再同步更新快取或者先更新快取再同步更新資料庫,其實都屬於write through,同步更新的好處在於可以很好的保持資料的一致性,但是缺點在於同步更新時,必然會影響效能。
第二種情況,先更新快取,然後再非同步寫回資料庫,也就是write back,非同步寫回的好處在於不會影響快取的高效能,能夠快速響應客戶端,但是缺點在於在資料非同步寫回到資料庫之前,存在快取和資料庫資料短暫不一致。
二、快取雪崩
快取雪崩是指,在同一時刻有大量快取失效,導致大量的請求到達後端資料庫,從而使資料庫承受巨大的壓力。
應對措施:
使用redis快取時,應當避免出現大量快取資料同時失效,建議在設定鍵過期時間時,將過期時間加上一定範圍的隨機值,從而達到增加隨機失效時間的目的,避免過多的快取key在同一時間失效。
2. 提高redis本身的可靠性,比如使用主從模式或者集群模式。
三、快取穿透
快取穿透是指,從redis快取讀取不到資料,同時也從資料庫讀取不到資料,這樣導致redis快取無法更新,每次請求也都要查詢資料庫。
應對措施:
將redis快取和資料庫都查不到資料的快取key設定成null值,這樣客戶端將從快取拿到空值,因此也不會請求到資料庫
前段元件限流
在閘道器進行介面呼叫的檢驗,防止惡意攻擊
四、快取擊穿
快取擊穿是指,某個熱點資料失效,導致大量請求該熱點資料的流量到達後端資料庫。
應對措施:對熱點資料不設定過期時間
五、快取替換
redis將所有資料都儲存在記憶體,而記憶體空間是有限的,當快取中資料存滿了之後,必然要採取用新資料替換掉快取中舊資料的操作。
常用替換方法:
allkeys-lru
優先移除最近未使用的key,這種替換演算法適用於有冷熱資料之分的場景,即淘汰冷資料,留下熱資料。
2. allkeys-random
隨機淘汰key,這種替換演算法適用於無冷熱資料之分的場景,即淘汰任意鍵都不對業務造成影響。
Redi學筆記 Redis簡介
易擴充套件 nosql資料庫種類繁多,但是乙個共同的特點都是去掉關聯式資料庫的關係型特性。資料之間無關係,這樣就非常容易擴充套件。也無形之間,在架構的層面上帶來了可擴充套件的能力。高效能 nosql資料庫都具有非常高的讀寫效能,尤其在大資料量下,同樣表現優秀。這得益於它的無關係性,資料庫的結構簡單。...
Redis存讀取資料
redis中包括四種資料型別,strings,lists,sets,sorted sets 接下來我們一一看這四種型別的用法 1.連線redis伺服器 redisclient client private void button1 click object sender,eventargs e 2....
Python讀取redis資料
以讀取redis的list資料型別為例 1 首先匯入redis類 2 使用redis.redis連線redis,引數為host和port 3 取特定長度的字段使用lrange函式。lrange self,name,start,end 結果為python的list型別 如下是個小例子 import r...