redis緩存是支持數據持久化的操做,也就是能夠把內存中的數據持久化到硬盤當中,和數據庫有些類似,這也是redis和memcache的區別之一。redis
在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot),也是redis持久化的默認方式。數據庫
持久化記錄服務器執行的全部操做命令,並在服務啓動時,經過從新執行這些命令來還原數據集。緩存
配置以下:安全
<span style="font-size:12px;">################################ SNAPSHOTTING ################################# # # Save the DB on disk: # # save <seconds> <changes> # # Will save the DB if both the given number of seconds and the given # number of write operations against the DB occurred. # # In the example below the behaviour will be to save: # after 900 sec (15 min) if at least 1 key changed # after 300 sec (5 min) if at least 10 keys changed # after 60 sec if at least 10000 keys changed # # Note: you can disable saving at all commenting all the "save" lines. save 900 1 //服務器在900秒內,對緩存數據庫至少修改了1次 save 300 10 //服務器在300秒內,對緩存數據庫至少修改了1次 save 60 10000 //服務在60秒內,對緩存數據庫至少修改了10000次 # Compress string objects using LZF when dump .rdb databases? # For default that's set to 'yes' as it's almost always a win. # If you want to save some CPU in the saving child set it to 'no' but # the dataset will likely be bigger if you have compressible values or keys. rdbcompression yes # The filename where to dump the DB dbfilename dump.rdb //持久化數據存到磁盤的文件名稱 # The working directory. # # The DB will be written inside this directory, with the filename specified # above using the 'dbfilename' configuration directive. # # Also the Append Only File will be created inside this directory. # # Note that you must specify a directory here, not a file name. dir ./ //存到磁盤的路徑</span>
只要知足上面三個save配置中的一個,redis就會自動進行數據快照,持久化到硬盤中。用戶可根據本身需求進行配置。服務器
看到上面的配置我會很好奇,服務器怎麼知道我在多長的時間對緩存數據修改了多少次了?後來發現Redis服務其中有個dirty和一個lastsave時間戳。app
當服務器執行一個數據修改命令以後,dirty計數器數值會進行更新。ide
lastsave則是記錄上次服務器執行BGSAVE命令的時間,在這就不詳細解釋了。this
AOF持久化數據是經過保存Redis服務全部的操做命令,下次啓動服務時,重新執行這些操做命令來還原緩存數據。spa
AOF文件刷新有三種方式:code
1.appendfsync always - 每提交一個修改命令都調用fsync刷新到AOF文件,很是很是慢,但也很是安全
2.appendfsync everysec - 每秒鐘都調用fsync刷新到AOF文件,很快,但可能會丟失一秒之內的數據
3.appendfsync no - 依靠OS進行刷新,redis不主動刷新AOF,這樣最快,但安全性就差
默認並推薦每秒刷新,這樣在速度和安全上都作到了兼顧
RDB
RDB恢復數據的方式沒有專門的操做命令去執行,redis服務啓動時,會自動查找RDB文件進行加載,指導RDB文件加載完成爲止。
AOF
服務器在啓動時,經過載入和執行AOF文件中保存的命令來還原服務器關閉以前的數據庫狀態,具體過程:
(1)載入AOF文件
(2)建立模擬客戶端
(3)從AOF文件中讀取一條命令
(4)使用模擬客戶端執行命令
(5)循環讀取並執行命令,直到所有完成
若是同時啓用了RDB和AOF方式,AOF優先,啓動時只加載AOF文件恢復數據