寫在開始
redis是一個基於內存hash結構的緩存型db。其優勢在於速讀寫能力碾壓mysql。由於其為基於內存的db所以存儲數據量是受限的。
redis性能
redis讀寫性能測試redis官網測試讀寫能到10萬左右
redis讀寫能力為2W/s
mysql讀能力5K/s、寫能力為3K/s
數據上看redis性能碾壓mysql
redis緩存穿透
緩存穿透是指查詢一個一定不存在的數據,由於緩存是不命中時被動寫的,並且出於容錯考慮,如果從存儲層查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到存儲層去查詢,失去了緩存的意義。在流量大時,可能DB就掛了。
解決辦法就是將從db過來的返回值進行緩存,根據實際情況重新加熱,若db返回是空則緩存幾分鍾就可以了。
redis緩存雪崩
在我們設置緩存時采用了相同的過期時間或者緩存服務器因某些原因無法使用時,導致緩存在某一時刻同時失效,請求全部轉發到DB,DB瞬時壓力過重雪崩。
解決辦法過期時間上增加一個范圍的隨機值,使用Redis Sentinel 和 Redis Cluster 實現高可用,另增設一個壽命更短的本機緩存來解決redis分布緩存搶修時的問題。
在發生無論是緩存穿透還是緩存雪崩,都建議使用隊列來排隊、拒絕大量請求涌入和分布式互斥鎖來避免后端數據服務被沖擊,防止已有的數據出現問題。