redis的快取雪崩,擊穿,和穿透的描述和解決方案?
1.快取穿透:
描述: 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為「-1」的資料或id為特別大不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大。
解決方案:1.介面層增加校驗,如使用者鑑權校驗,id做基礎校驗,id<=0的直接攔截;
2.從快取取不到的資料,在資料庫中也沒有取到,這時也可以將key-value對寫為key-null,快取有效時間可以設定短點,如30秒(設定太長會導致正常情況也沒法使用)。這樣可以防止攻擊使用者反覆用同乙個id暴力攻擊
2.快取擊穿:
描述:快取擊穿是指快取中沒有但資料庫中有的資料(一般是快取時間到期),這時由於併發使用者特別多,同時讀快取沒讀到資料,又同時去資料庫去取資料,引起資料庫壓力瞬間增大,造成過大壓力。
解決方案:1.設定熱點資料永遠不過期
2.加互斥鎖。
3.快取雪崩:
描述:快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。和快取擊穿不同的是, 快取擊穿指併發查同一條資料,快取雪崩是不同資料都過期了,很多資料都查不到從而查資料庫。
解決方案:
1.快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。
2.如果快取資料庫是分布式部署,將熱點資料均勻分布在不同搞得快取資料庫中。
3.設定熱點資料永遠不過期。
redis 是單執行緒但效能高的原因?
1、完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o(1);
2、資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的;
3、採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗 cpu,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗;
4、使用多路i/o復用模型,非阻塞io;
5、使用底層模型不同,它們之間底層實現方式以及與客戶端之間通訊的應用協議不一樣,redis直接自己構建了vm 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求
redis的快取機制?
redis的資料型別?
1.string 資料型別
2.hash資料型別
3.list 資料型別
4.set資料型別
5.sorted set型別
Redis知識總結
什麼是關係型的資料庫 以關係模型來組織資料的資料庫,以行與列的方式來儲存資料。什麼是nosql資料庫 泛指非關係型資料庫,以鍵值對的方式來儲存資料,大大增加了業務擴充套件能力 常用的nosql資料庫 1 memcached 2 redis 3 mongodb 什麼是redis redis是乙個鍵值對...
redis知識總結
本人小白乙個,不能保證部落格中內容都準確,如果部落格中有錯誤的地方,望各位多多指教,請指正。歡迎找我一起討論 redis 是用 c語言編寫的乙個非關係型資料庫 redis可以用來做快取,分布式鎖 redis適合儲存 高頻的熱點資料 廣告 使用者經常訪問的資料 redis是基於記憶體的,絕大部分請求都...
Redis知識點總結
fifo first in first out,先進先出。判斷被儲存的時間,離目前最遠的資料優先被淘汰。lru least recently used,最近最少使用。判斷最近被使用的時間,目前最遠的資料優先被淘汰。lfu least frequently used,最不經常使用。在一段時間內,資料被...