這篇文章主要介紹了Redis相關問題有哪些的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Redis相關問題有哪些文章都會有所收獲,下面我們一起來看看吧。
一、緩存穿透
概念 - 訪問一個不存在的key,緩存不起作用,請求會穿透到DB,流量大時DB會掛掉。
存在場景
系統設計不合理,緩存數據更新不及時
爬蟲等惡意攻擊
解決方案
采用布隆過濾器,使用一個足夠大的bitmap,用于存儲可能訪問的key,不存在的key直接被過濾
若訪問 key 在 DB 中不存在,在 Redis 中寫入一個空值,設置一個較短的過期時間,避免長期占用內存。
二、緩存雪崩
概念
大量的key設置了相同的過期時間,導致在緩存在同一時刻全部失效,造成瞬時DB請求量大、壓力驟增,引起雪崩。解決方案
事前:使用主從復制+哨兵或者Redis集群。
事中:本地緩存結合限流和降級。
事后:開啟持久化配置,實現快速緩存的快速恢復。
可以給緩存設置過期時間時加上一個隨機值時間,使得每個key的過期時間分布開來,不會集中在同一時刻失效。
三、緩存擊穿
概念
熱點 key 問題,一個存在的key,在緩存過期的一刻,同時有大量的請求,這些請求都會擊穿到DB,造成瞬時DB請求量大、壓力驟增。解決方案
在訪問key之前,采用SETNX(set if not exists)來設置另一個短期 key 來鎖住當前 key 的訪問,訪問結束再刪除該短期key(互斥鎖,同一時刻只允許一個線程去構建緩存,其他線程等待構建完畢后去緩存?。?/p>
同一時刻只允許一個線程去構建緩存,其他線程等待構建完畢后去緩存取
四、數據庫、緩存雙寫不一致
概念
當一個數據需要更新時,不可能做到同時更新數據庫和緩存,那么此時讀取數據的時候就一定會發生數據不一致問題,而數據不一致問題在金融交易領域的系統中是肯定不允許的。
解決方案
讀的時候,先讀緩存,緩存沒有的話,就讀數據庫,然后取出數據后放入緩存,同時返回響應。
更新的時候,先更新數據庫,然后再刪除緩存。
五、緩存淘汰策略
概念
緩存 30G 的數據,但 Redis 本身只支持 10G,則使用緩存淘汰機制,保留最重要的 10個G 數據。
Redis 提供的淘汰策略
查看 Redis 允許使用的最大內存,屬性:server.maxmemory
指定數據淘汰算法 :maxmemory-policy allkeys-lru
LRU和最小TTL算法的樣本個數 :maxmemory-samples 5
volatile-lru:從已設置過期時間的數據集中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過期時間的數據集挑選將要過期的數據淘汰
volatile-random:從已設置過期時間的數據集中任意選擇數據淘汰
allkeys-lru:從數據集中挑選最近最少使用的數據淘汰
allkeys-random:從數據集中任意選擇數據淘汰
no-enviction:內存不足時添加數據會報錯
關于“Redis相關問題有哪些”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Redis相關問題有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。