Redis為什麼快及其高可用技術的幾種方案

2021-08-26 09:29:21 字數 1587 閱讀 1622

一 redis為什麼快?

redis近幾年快速發展,作為一種成熟的快取方案在各個大大小小的專案中使用

據官方測試redis可以達到10萬+的qps,這個次數不比使用單程序多執行緒的memcached差!那為什麼這麼快呢?

我也使用redis很久了,知道redis快的原因大概兩點:記憶體直接讀寫減少磁碟io;單執行緒多路非阻塞io減少執行緒切換上下文的時間。

官方說法:

1、完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o(1);

2、資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的;

3、採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗 cpu,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗;

4、使用多路i/o復用模型,非阻塞io;

5、使用底層模型不同,它們之間底層實現方式以及與客戶端之間通訊的應用協議不一樣,redis直接自己構建了vm 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求;

二 幾種方案的優缺點

redis提供了層次遞進的技術方案,無論是剛創業的小而美的公司又或者是大而全的巨無霸都可以從其中找到合適的解決方案,當然,這對我們的redis開發人員就提出了更高的要求,如何避免過多設計和資源的合理分配是乙個很重要的問題。

那麼redis有哪幾種快取解決方案呢?

redis 單副本

redis 多副本(主從)

redis sentinel(哨兵)

redis cluster

當然我們還可以基於redis進行二次研發,這裡不做討論。方案很多,並不是越高大上的集群高可用就越好,我們要根據公司自身的業務來合理的選擇方案來達到資源的合理化,既能減少資源的使用也能減少開發運維人員的工作量,總之一句話:「適合自己的才是最好的!」

所以我們應當了解redis幾種方案的優劣及適用場景:

1 redis單副本

redis單副本,採用單個redis節點部署,沒有備用節點實時同步資料,不提供資料的持久化和備份策略,適用於資料可靠性要求不高的純快取業務場景

優點:

缺點:

redis多副本,採用主從部署結構,相較於單副本而言最大的特點是主從例項間資料實時同步,並提供資料持久化和備份策略

主從例項部署在不同的物理伺服器上,根據公司的基礎環境配置,可以同時對外提供服務和讀寫分離策略

優點:

缺點:

redis cluster是社群版推出的redis分布式集群解決方案,主要解決redis分布式方面的需求,比如單機記憶體併發和流量瓶頸的時候,redis cluster能起到很好的負載均衡的目的

redis cluster集群節點最小配置6個及以上節點(3主3從),其中主節點提供讀寫操作,從節點作為備用節點不提供請求,只為故障轉移使用。

redis cluster採用虛擬槽分割槽,所有的鍵根據雜湊函式對映到0~16383個整數槽內,每個節點負責維護一部分以及所對映的鍵值資料

優點:

redis為什麼快

如果我們執行的伺服器是多核伺服器,為了充分利用多核優勢我們可以在單台伺服器起多個 redis 服務,或者架設 主從複製 哨兵模式 集群模式等多機方案。redis 服務執行時只是處理客戶端請求是單程序單執行緒的,但是服務執行時會有其他程序或執行緒處理其他的事,比如rdb的檔案的生成就會在子程序中進行等...

redis 為什麼快

redis採用自己實現的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。不過,因為一般的記憶體操作都是簡單訪問操作,執行緒占用時間相對較短,主要問題在io上,因此,redis這種模型是合適的,但是如果某乙個執行緒出現問題導致執行緒占用很長時間,那麼reids的單執行緒模型效率可想而...

Redis為什麼這麼快?

今天我在乙個技術群裡提出乙個問題 redis為什麼這麼快,redis的那些特性能夠支援了它的高併發?之前的我,也只是知道redis是記憶體資料庫,所以讀取速度快 io使用的是多路復用,使用乙個執行緒來輪詢描述符,減少了執行緒上下文的切換,將資料庫的開 關 讀 寫都轉化成了時間,所以io時也有加速。雖...