幾大快取常用概念

2021-09-08 16:05:42 字數 1305 閱讀 8972

redis最大的特點就是快,快。有幾大原因:

要解釋單執行緒和多路復用,就必須從整個操作流程看起。客戶端與redis建立連線(多併發)----->網路i/o向伺服器傳送操作請求------->單執行緒輪詢讀取i/o,解析請求,操作redis中資料,返回結果(這個時候是單執行緒)。

其中多路,就是多網路,即多個併發請求,i/o復用模型是利用 select、poll、epoll 可以同時監察多個流的 i/o 事件的能力,在空閒的時候,會把當前執行緒阻塞掉,當有乙個或多個流有 i/o 事件時,就從阻塞態中喚醒,於是程式就會輪詢一遍所有的流(epoll 是只輪詢那些真正發出了事件的流),並且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。

所以單執行緒只是讀取i/o,解析請求,處理資料的時候是乙個執行緒的。服務本身的正常運作肯定是多個執行緒共同協作的,此處不可混淆。---此處趙澤仁看過來,哈哈。

伺服器雪崩:分布式系統都存在這樣乙個問題,由於網路的不穩定性,決定了任何乙個服務的可用性都不是 100% 的。當網路不穩定的時候,作為服務的提供者,自身可能會被拖死,導致服務呼叫者阻塞,最終可能引發雪崩連鎖效應。

快取雪崩:當快取伺服器重啟或者大量快取集中在某乙個時間段失效,這樣在失效的時候,也會給後端系統(比如db)帶來很大壓力,造成資料庫後端故障,從而引起應用伺服器雪崩。

解決方案:

**訪問資料的特點大多數呈現在"二八定律":80%的業務訪問集中在20%的資料上。這時為了減輕資料的壓力和提高**的資料訪問速度,則可以使用快取機制來優化**。這20%的資料就是所謂的熱資料,其他的資料稱為冷資料。

快取穿透:是指查詢乙個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。 

key不存在時,大量的資料進來查詢db

解決方案:

快取穿透:在高併發下,多執行緒同時查詢同乙個資源,如果快取中沒有這個資源,那麼這些執行緒都會去資料庫查詢,對資料庫造成極大壓力,快取失去存在的意義。

解決方案:

快取冷啟動,redis啟動後,一點資料都沒有,直接就對外提供服務了,mysql就裸奔。所謂預熱就是提前向redis寫入資料,可以根據資料的訪問統計量進行篩選熱資料,不僅啟動後寫入,也可以實時動態的寫入redis。

顧名思義,就是定期清理redis過期資料,除了redis自己的expiretime外,我們可以根據業務來判斷該資料是否過期需要清除。

比如訪問熱門商品,每次訪問都可以上報到kafka,用於熱點計數,消費kafka進行實時統計,選出topn,寫入redis,其他的設定為過期。

基本快取概念

1 客戶端快取 標籤,這是進行頁面快取最基本的方法。1 2 傳送到瀏覽器的html頁面中的meta標籤告訴瀏覽器頁面的快取時間以及是否啟用快取等,programa no cache內容並不是保證,但大多數瀏覽器都遵從這個約定。更好的方法是使用header函式,傳送http頭。1 2header ex...

快取的概念

許多人認為,快取 是記憶體的一部分 許多技術文章都是這樣教授的 但是還是有很多人不知道快取在什麼地方,快取是做什麼用的 其實,快取是cpu的一部分,它存在於cpu中 cpu訪問資料的速度非常的快,一秒鐘能夠訪問 處理十億條指令和資料 術語 cpu主頻1g 而記憶體就慢很多,快的記憶體能夠達到幾十兆就...

快取的概念

網上整理的資料1 快取的概念 許多人認為,快取 是記憶體的一部分 許多技術文章都是這樣教授的 但是還是有很多人不知道快取在什麼地方,快取是做什麼用的 其實,快取是cpu的一部分,它存在於cpu中 cpu訪問資料的速度非常的快,一秒鐘能夠訪問 處理十億條指令和資料 術語 cpu主頻1g 而記憶體就慢很...