redis是一個鍵值對,NOSQL,高性能存儲系統,性能高,是分佈式緩存的最佳人選,特別是node環境下,因爲node的內存限制,是的node在內存方面寸土寸金,使用redis作緩存,是高性能高併發,node服務器最佳組合。node
redis是使用內存進行存儲的,因此就註定了他不適合很是大的持久性數據,這樣的數據仍是交給mongodb,elasticSearch,mysql來存儲。使用redis必定要注意內存的浪費,redis是單線程的必定要注意redis對cpu的使用率,若是太高就會形成卡頓。redis的過時鍵數據回收機制有兩種,惰性回收和定時回收。mysql
redis哨兵是redis分佈式的關鍵。下來看一下redis主從複製問題,在主從複製模式下主節點將數據同步到從節點,一旦主節點出問題從節點頂上去,這樣以來一個關鍵的問題是主節點的讀和寫的能力就決定了整個系統的能力。若是這個過程有人工干預必然形成數據不完整和丟失,這就要求咱們構建高可用的redis集羣。redis
一個高可用的redis主從複製模式,對於小型的公司這樣足夠了。它包括若干個哨兵節點和若干個數據節點,每一個哨兵節點會對數據節點和其他的哨兵節點進行監控,當發現節點不可用時,會對節點進行標識,若是被標識的節點是主節點,他就會和其餘哨兵節點進行協商,當大多數哨兵節點都認爲主節點不可用,他們會自動選出一個哨兵節點完成鼓掌轉義工做,整個過程自動化,從而使系統高可用。sql
一個分佈是數據庫首先要解決的問題是,把這個數據集合按照分區映射到多個節點的問題,通常有三種選擇:1,節點取餘分區。2,哈希表分區。3,虛擬槽分區。redis採用的是虛擬槽分區。它是全部的鍵值根據哈希函數映射到0-16383的整數槽內,一個節點負責維護一部分槽位和數據,而且節點之間不斷交換信息,一段時間後一個節點就知道整個集羣的完整信息,可是這種信息交換是有成本的。理論上來說,能夠向集羣的任意一個節點發送數據請求,若是該節點沒有,它會自動向有的節點轉發。若是你是運維工程師,裏面設計的問題不少很複雜,這裏再也不贅述。mongodb