redis数据持久化到mysql_Redis【数据持久化篇】
生活随笔
收集整理的這篇文章主要介紹了
redis数据持久化到mysql_Redis【数据持久化篇】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 前言
redis是一款基于內存的NoSQL數據庫,數據都存儲在內存中,一旦機器出現宕機,或者突發意外斷電等,導致機器無法正常工作的情況下,那么redis中的數據就丟失了,面對這種問題,redis提供了持久化機制將數據保存到本地磁盤中,以便在服務器宕機之后,可以對數據進行恢復。2 Redis持久化
i. Redis持久化,就是將內存中的數據,永久保存到磁盤上。ii. Redis持久化有兩種方式:RDB(Redis DB)、AOF(AppendOnlyFile)。
2.1 RDB(快照模式)
在默認情況下,Redis 將數據庫快照保存在名字為dump.rdb的二進制文件中,可以在redis.conf配置文件中修改持久化信息。save 900 1 表示在900秒內,至少更新了1條數據。Redis就將數據持久化到硬盤save 300 10 表示在300秒內,至少更新了10條數據,Redis就會觸發將數據持久化到硬盤
save 60 10000 表示60秒內,至少更新了10000條數據,Redis就會觸發將數據持久化到硬盤
2.1.1 策略
(1)自動:BGSAVE
--特點:
【1】按照配置文件中的條件滿足就執行BGSAVE。【2】非阻塞,Redis服務正常接收處理客戶端請求。
【3】Redis會folk()一個新的子進程來創建RDB文件,子進程處理完后會向父進程發送一個信號,通知它處理完畢,父進程用新的dump.rdb替代舊文件。
(2)手動:SAVE
--特點:
【1】客戶端(redis-cli)發起SAVE命令。【2】阻塞Redis服務,無法響應客戶端請求。
【3】創建新的dump.rdb替代舊文件。
2.1.2 優點
i. 執行效率高。ii. 恢復大數據集速度較AOF快。
2.1.3 缺點
i. 會丟失最近寫入、修改的而未能持久化的數據。ii. folk過程非常耗時,會造成毫秒級不能響應客戶端請求。
2.2 AOF(追加模式、命令重演)
2.2.1 特點
【1】Append only file,采用追加的方式保存,默認文件為appendonly.aof;【2】記錄所有的寫操作命令,在服務啟動的時候重演這些命令就可以還原數據庫;
【3】AOF默認關閉,需要在配置文件中手動開啟。
2.2.2 寫入機制
說明:AOF機制,添加了一個內存緩沖區(buffer),將內容寫入緩沖區。當緩沖區被填滿、或者用戶手動執行fsync、或者系統根據指定的寫入磁盤策略自動調用fdatasync命令,才將緩沖區里的內容真正寫入磁盤里。因此在緩沖區里的內容未寫入磁盤之前,可能會丟失。
2.2.3 寫入磁盤的策略
appendfsync選項,這個選項的值可以是always、everysec或者no。Always:服務器每寫入一個命令,就調用一次fdatasync,將緩沖區里面的命令寫入到硬盤。這種模式下,服務器出現故障,也不會丟失任何已經成功執行的命令數據。Everysec(默認):服務器每一秒調用一次fdatasync,將緩沖區里面的命令寫入到硬盤。這種模式下,服務器出現故障,最多只丟失一秒鐘內的執行的命令數據。No:服務器不主動調用fdatasync,由操作系統決定何時將緩沖區里面的命令寫入到硬盤。這種模式下,服務器遭遇意外停機時,丟失命令的數量是不確定的。運行速度:always的速度慢,everysec和no都很快。
2.2.4 aof重寫機制
AOF文件過大,合并重復的操作,AOF會使用盡可能少的命令來記錄。2.2.4.1 重寫過程
(1)fork一個子進程負責重寫AOF文件。(2)子進程會創建一個臨時文件寫入AOF信息。
(3)父進程會開辟一個內存緩沖區接收新的寫命令。
(4)子進程重寫完成后,父進程會獲得一個信號,將父進程接收到的新的寫操作由子進程寫入到臨時文件中。
(5)新文件替代舊文件。
重寫的本質:就是將操作同一個鍵的命令合并。從而減小AOF文件的體積。
2.2.4.2 aof重寫觸發機制
(1)手動:客戶端向服務器發送BGREWRITEAOF命令。(2)自動:配置文件中的選項,自動執行BGREWRITEAOF命令。
auto-aof-rewrite-min-size <size>
觸發AOF重寫所需的最小體積:只要在AOF文件的體積大于等于size時,才會考慮是否需要進行AOF重寫,這個選項用于避免對體積過小的AOF文件進行重寫。auto-aof-rewrite-percentage <percent>
指定觸發重寫所需的AOF文件體積百分比:當AOF文件的體積大于auto-aof-rewrite-min-size指定的體積,并且超過上一次重寫之后的AOF文件體積的percent %時,就會觸發AOF重寫。(如果服務器剛剛啟動不久,還沒有進行過AOF重寫,那么使用服務器啟動時載入的AOF文件的體積來作為基準值)。將這個值設置為0表示關閉自動AOF重寫。
2.2.5 優點
(1)寫入機制,默認fysnc(手工同步)每秒執行,性能很好不阻塞服務,最多丟失一秒的數據;(2)重寫機制,優化AOF文件;
(3)如果誤操作了(FLUSHALL等),只要AOF未被重寫,停止服務移除AOF文件尾部FLUSHALL命令,重啟Redis,可以將數據集恢復到FLUSHALL 執行之前的狀態。
2.2.6 缺點
(1)相同數據集,AOF文件體積較RDB大了很多。(2)恢復數據庫速度較RDB慢(文本,命令重演)。
總結
以上是生活随笔為你收集整理的redis数据持久化到mysql_Redis【数据持久化篇】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬取知乎标题_python爬
- 下一篇: python集合与字典区别_Python