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查詢到值,也將空值寫進快取,但可以設定較短過期時間。