高可用
哨兵模式
基于主從模式(一主多從),主服務器提供寫服務,從服務器同步主服務器,從服務器可提供讀服務,哨兵(可多個節(jié)點實現(xiàn)高可用)監(jiān)控所有服務,實現(xiàn)故障時自動主從切換
缺點: 只提供高可用并沒有提高redis的讀寫能力,存在主從切換時瞬斷問題
高可用集群模式
redis單機支持10萬并發(fā), Redis集群水平擴展能突破這個并發(fā)數(shù)
各個集群模式數(shù)據(jù)獨立, Jedis(Redis官方推薦的Java連接開發(fā)工具)通過算法計算緩存key落在哪個集群,再由這個集群提供服務,算法參考 java面試寶典 redis篇 一致性hash算法, 假如集群主服務器掛了,對應的服務唯一碼也會在列表中去掉,請求也就不會往故障集群發(fā)送,這就解決了主從切換瞬斷的問題
持久化
RDB
RDB持久化是指在指定的時間間隔內將內存中的數(shù)據(jù)集快照寫入磁盤
三種觸發(fā)模式
- save觸發(fā)方式
該命令會阻塞當前Redis服務器,執(zhí)行save命令期間,Redis不能處理其他命令,直到持久化過程完成為止, 這種方式顯然不可取。 - bgsave觸發(fā)方式
執(zhí)行該save命令時,Redis會在后臺異步進行快照操作, 默認采用這種方式 - 自動觸發(fā)
自動觸發(fā)是由我們的配置文件來完成的。在redis.conf配置文件中,我們可以去設置
優(yōu)點:
(1)RDB快照是一次全量備份,存儲的是內存數(shù)據(jù)的二進制序列化形式,存儲上非常緊湊,非常適合用于進行備份和災難恢復。
(2)RDB 在恢復大數(shù)據(jù)集時的速度比 AOF 的恢復速度要快。
缺點:
備份是用子線程備份, 父進程修改內存子進程不會反應出來,所以在快照持久化期間修改的數(shù)據(jù)不會被保存,可能丟失數(shù)據(jù)。
AOF
redis會將每一個收到的寫命令都通過write函數(shù)追加到文件中。通俗的理解就是日志記錄。
由于持久化文件會變的越來越大, redis會會fork出一條新進程來將文件重寫, 重寫aof文件的操作,并沒有讀取舊的aof文件,而是將整個內存中的數(shù)據(jù)庫內容用命令的方式重寫了一個新的aof文件,這點和快照有點類似。
二種觸發(fā)模式
- 同步觸發(fā),數(shù)據(jù)可靠,但是會有延遲
- 異步觸發(fā),沒有延遲,可能有數(shù)據(jù)丟失
優(yōu)點:
AOF日志文件的命令通過非常可讀的方式進行記錄,這個特性非常適合做災難性的誤刪除的緊急恢復。比如某人不小心用flushall命令清空了所有數(shù)據(jù),只要這個時候后臺rewrite還沒有發(fā)生,那么就可以立即拷貝AOF文件,將最后一條flushall命令給刪了,然后再將該AOF文件放回去,就可以通過恢復機制,自動恢復所有數(shù)據(jù)
缺點:
(1)對于同一份數(shù)據(jù)來說,AOF日志文件通常比RDB數(shù)據(jù)快照文件更大
(2)以前AOF發(fā)生過bug,就是通過AOF記錄的日志,進行數(shù)據(jù)恢復的時候,沒有恢復一模一樣的數(shù)據(jù)出來。
更多demo請關注
springboot demo實戰(zhàn)項目
java 腦洞
java 面試寶典
開源工具
公眾號
五分鐘了解前沿技術,大數(shù)據(jù),微服務,區(qū)域鏈,提供java前沿技術干貨,獨立游戲制作技術分享
如果這篇文章對你有幫助請給個star