1、持久化咱們前兩章已經講了,redis是內存型的數據庫,他之因此快是由於數據存儲在內存。那麼數據存儲在內存會有什麼問題呢?固然就是當服務重啓或者服務器宕機內存數據就被清除,咱們就沒法訪問以前存儲的數據了。那麼怎麼解決這個問題呢?固然就是使用持久化技術面試
持久化(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化是將程序數據在持久狀態和瞬時狀態間轉換的機制。好比JDBC就是一種持久化機制。文件IO也是一種持久化機制。redis
redis也是一個支持持久化的內存數據庫,也就是說redis須要常常將內存中的數據同步到磁盤來保證持久化,持久化能夠避免因進程退出而形成數據丟失;數據庫
redis支持兩種持久化方式,RDB和AOF設計模式
2、RDB持久化方式RDB持久化把當前進程數據生成快照(.rdb)文件保存到硬盤的過程,有手動觸發和自動觸發服務器
手動觸發有save和bgsave兩命令多線程
save****命令:阻塞當前Redis,直到RDB持久化過程完成爲止,若內存實例比較大會形成長時間阻塞,線上環境不建議用它架構
bgsave****命令:redis進程執行fork操做建立子進程,由子線程完成持久化,阻塞時間很短(微秒級),是save的優化,在執行redis-cli shutdown關閉redis服務時,若是沒有開啓AOF持久化,自動執行bgsave;併發
bgsave流程以下:app
命令:config set dir /usr/local //設置rdb文件保存路徑分佈式
備份:bgsave //將dump.rdb保存到usr/local下
恢復:將dump.rdb放到redis安裝目錄與redis.conf同級目錄,重啓redis便可
1,查看啓動目錄,沒有dump文件
二、set值
三、執行shutdown命令關掉服務,查看目錄,已經生成對應的dump文件。
四、重啓redis服務,發現數據還存在
五、執行shutdown命令關掉服務,並把dump文件刪除
六、啓動redis在進行查看,發現存儲的數據已經不存在了。
優勢:
缺點:
針對RDB不適合實時持久化,redis提供了AOF持久化方式來解決
開啓方式就是在redis.conf設置:appendonly yes (默認不開啓,爲no)
默認文件名:appendfilename "appendonly.aof"
配置信息 | 含義 |
appendonly yes | 啓用aof持久化方式 |
appendfsync always | 每收到寫命令就當即強制寫入磁盤,最慢的,可是保證徹底的持久化,不推薦使用 |
appendfsync everysec | 每秒強制寫入磁盤一次,性能和持久化方面作了折中,推薦 |
no-appendfsync-on-rewrite yes | 正在導出rdb快照的過程當中,要不要中止同步aof |
auto-aof-rewrite-percentage 100 | aof文件大小比起上次重寫時的大小,增加率100%時,重寫 |
auto-aof-rewrite-min-size 64mb | aof文件,至少超過64M時,重寫 |
設置appendonly yes;
將appendonly.aof放到dir參數指定的目錄;
啓動Redis,Redis會自動加載appendonly.aof文件。
若是同時都開啓了AOF和RDB 兩種持久化方式,那麼加載順序及流程以下
最後一直想整理出一份完美的面試寶典,可是時間上一直騰不開,這套一千多道面試題寶典,結合今年金三銀四各類大廠面試題,以及 GitHub 上 star 數超 30K+ 的文檔整理出來的,我上傳之後,毫無心外的短短半個小時點贊量就達到了 13k,說實話仍是有點難以想象的。
內容涵蓋:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技術棧(485頁)
內容涵蓋:Java基礎、JVM、高併發、多線程、分佈式、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、數據庫、雲計算等
因爲篇幅限制,詳解資料太全面,細節內容太多,因此只把部分知識點截圖出來粗略的介紹,每一個小節點裏面都有更細化的內容!
須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式!