一、Redis數據備份與恢復


Redis里的數據都是保存在內存中,關閉服務器必須進行數據備份。

1、Redis的數據持久化

bgsave做鏡像全量持久化,AOF做增量持久化。

bgsave的原理:fork和cow(copy on write)fork是redis通過創建子進程來進行bgsave操作,子進程創建后,父子進程共享數據段,父進程繼續提供讀寫服務,並不會阻塞,寫臟的頁面數據會逐漸和子進程分離開。

bgsave是fork出一個子進程,子進程負責調用RDBsave,並在保存完成之后向主進程發送信號,通知保存已經完成。因為RDBsave在子進程被調用,所以Redis服務器在BGsave執行期間仍然可以處理客戶端的請求,一般常用bgsave進行線上數據處理。

save:是直接調用RDBsave,阻塞掉redis主進程,直到保存完成為止。在主進程阻塞的期間,服務器不能處理客戶端的任何請求。

bgsave的缺點:因為bgsave會耗費較長時間,不夠實時,服務器假如停機的時候會導致大量丟失數據,所以需要AOF來配合使用。在redis實例重啟的時候,會使用bgsave持久化文件重新構建內存,在使用AOF重放近期的操作指令來實現完整恢復重啟之前的狀態。AOF日志功能有SYNC屬性的配置,如果不要求性能的話,可以在每寫指令時都SYNC一下磁盤,就不會丟失數據。但是在高性能的要求下,每次都SYNC肯定不現實。一般都是定時使用SYNC,配置SYNC時間。

,2、Redis的同步機制

Redis可以使用主從同步,從從同步,第一次同步,主節點做一次bgsave,並同時將后續修改操作記錄在內存buffer,等到將RDB文件全量同步到復制節點,復制節點接受完成后將RDB鏡像加載到內存。加載完成后,在通知主節點將期間修改的操作記錄同步到復制節點,就進行重放,這就是同步過程。

3、Redis的集群原理

Redis有兩種集群方式

Redis Sentinal:高可用,在master宕機時會自動將slave提升為master,繼續提供服務。

Redis Cluster:着眼於擴展性,單個Redis內存不足的時候,使用Cluster進行分片存儲。

4、Redis的性能常見問題

  1、master不要做任何持久化工作,比如RDB內存快照,AOF日志文件,不然降低效率

  2、如果數據重要,slave開啟了AOF備份數據,配置SYNC的時間設置為一秒同步寫入磁盤一次。

  3、為了主從復制的速度和連接穩定性,master和slave放在同一個局域網內

5、假如說Oracle數據庫里有5000w條數據,redis只存20w條數據,怎么保證redis中的數據都是熱點數據

redis內存數據集大小上升到一定大小的時候,就會實施數據淘汰策略

redis的數據淘汰策略有:

  volatile-LRU:在已設置過期時間的數據集(server.db[i].expries)中選最近最少使用的數據淘汰。

  volatile-TTL:在已設置過期時間的數據集中挑選將要過期的數據淘汰。

  volatile-Random:在已設置過期時間的數據集中任意選擇數據淘汰

  allkeys-LRU:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰

  allkeys-Random:從數據集(server.db[i].dict)中任意選擇數據淘汰

  no-enviction(驅逐):禁止驅逐數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM