1. 程式人生 > >redis深入瞭解(一)

redis深入瞭解(一)

redis的常見問題:1.redis是記憶體版資料庫,如果記憶體滿了怎麼辦?方案一.. redis叢集1)一定程度可以解決記憶體不夠用的情況

2)但是隨著網站使用者不斷增多,使用者所產生的資料將會愈來愈多,3)伺服器越多,並不代表性能越高方案二。記憶體淘汰策略----最近不使用的資料從記憶體淘汰redis.conf 配置記憶體淘汰策略1)maxmemory 0 //表示淘汰所有記憶體2)maxmenory-poliy allkeys-lru//有限移除最近不使用的key2.redis是否是執行緒安全的資料庫 redis 是執行緒安全  Redis是一個開源,先進的key-value儲存,並用於構建高效能,可擴充套件的Web應用程式的完美解決方案,是執行緒安全的。  Redis三個主要特點:
       Redis是一個單執行緒資料庫(單通道)  Redis資料庫完全在記憶體中,使用磁碟僅用於永續性。  相比許多鍵值資料儲存,Redis擁有一套較為豐富的資料型別。  Redis可以將資料複製到任意數量的從伺服器。3.redis的hash槽,你是怎麼理解的?(redis如何儲存的)redis共有16384個hash槽,時固定的不能改變,無論叢集節點多少。hash槽將會動態的分配給每個伺服器hash槽存滿了怎麼辦?注意:hash槽不是用來儲存資料的,時用來計算該把資料儲存在哪個伺服器裡。相當於倉庫的門,4.redis快取穿透,快取擊穿,快取雪崩?設計一個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。

快取穿透

快取穿透是指查詢一個在快取和資料庫中不存在的資料,問題:這個資料庫訪問量瞬間增大,資料庫可能發生io阻塞,雪崩。解決:如果發現數據庫沒有資料,放一個空字元,並且設定過期時間

解決方案

有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器,將所有可能存在的資料雜湊到一個足夠大的bitmap中,一個一定不存在的資料會被 這個bitmap攔截掉,從而避免了對底層儲存系統的查詢壓力。另外也有一個更為簡單粗暴的方法(我們採用的就是這種),如果一個查詢返回的資料為空(不管是數 據不存在,還是系統故障),我們仍然把這個空結果進行快取,但它的過期時間會很短,最長不超過五分鐘。

快取擊穿

快取中有個key過期了,恰好此時這個key面臨一個高併發查詢,此時快取中沒有資料,併發壓力瞬間被轉移到資料庫,造成資料庫雪崩。。

解決方案

redis快取之前加鎖進行控制,當第一次訪問沒有值,查詢資料庫放入

快取雪崩

快取中很多key同時過期,恰好此時這些key面臨高併發查詢,發現快取中資料消失,這些併發壓力將會瞬間轉移給資料庫,資料庫面臨非常高的併發壓力,傳送雪崩。

解決方案

讓快取的key不同時過期,讓redis過期時間5分鐘時間+隨機數時間 過期