1. 程式人生 > 其它 >memcached與redis的區別

memcached與redis的區別

1 redis做儲存,可以持久化,memcache做快取,資料易丟失。

2 redis支援多資料型別,memcache存放字串。

3 redis服務端僅支援單程序、單執行緒訪問,也就是先來後到的序列模式,避免執行緒上下文切換,自然也就保證資料操作的原子性。Memcache服務端是支援多執行緒訪問的。

4 redis雖然是單程序單執行緒模式,但是redis使用了IO多路複用技術做到一個執行緒可以處理很多個請求來保證高效能。

Redis的主從複製

1 在Slave啟動並連線到Master之後,它將主動傳送一個SYNC命令給Master。

2 Master在收到SYNC命令之後,將執行BGSAVE命令執行後臺存檔程序(rdb快照), 同時收集所有接收到的修改資料集的命令即寫命令到緩衝區,在後臺存檔程序執行完畢後,Master將傳送整個資料庫檔案到Slave。

3 Slave在接收到資料庫檔案資料之後,將自身記憶體清空,載入rdb檔案到記憶體中完成一次完全同步。

4 接著,Master繼續將所有已經收集到緩衝區的修改命令,和新的修改命令依次傳送給Slaves

5 Slave將在本地執行這些資料修改命令,從而達到最終的資料同步

6 之後Master和Slave之間會不斷通過非同步方式進行命令的同步,從而保證資料的實時同步

7 如果Master和Slave之間的連結出現斷連現象,Slave可以自動重連Master

Redis的主從複製阻塞模式

1 同一個Master服務可以同步n多個Slave服務

2 Slave節點同樣可以接受其它Slave節點的連線和同步服務請求,分擔Master節點的同步壓力

3 Master是以非阻塞方式為Slave提供同步服務,所以主從複製期間Master一樣可以提供讀寫請求。

4 Slave同樣是以非阻塞的方式完成資料同步

Redis哨兵主要功能

(1)叢集監控:負責監控Redis master和slave程序是否正常工作

(2)訊息通知:如果某個Redis例項有故障,那麼哨兵負責傳送訊息作為報警通知給管理員

(3)故障轉移:如果master node掛掉了,會自動轉移到slave node上

(4)配置中心:如果故障轉移發生了,通知client客戶端新的master地址

Redis高併發和快速的原因

1.redis是基於記憶體的,記憶體的讀寫速度非常快;

2.redis是單執行緒的,省去了很多上下文切換執行緒的時間;

3.redis使用多路複用技術,可以處理併發的連線。

快取雪崩

如果快取集中在一段時間內失效,發生大量的快取穿透,所有的查詢都落在資料庫上,造成了快取雪崩。

解決辦法:

沒有完美的解決方案,可以通過隨機演算法讓失效時間隨機分佈,避免同一時刻失效。

快取穿透

訪問一個不存在的key,快取不起作用,請求會穿透到DB,可能DB也沒查到,流量大時DB會掛掉。

解決辦法:

1.採用布隆過濾器,使用一個足夠大的bitmap,用於儲存可能訪問的key,不存在的key直接被過濾;

2訪問key未在DB查詢到值,也將空值寫進快取,但可以設定較短過期時間。