Redis是什么?
redis是一個開源的key-value存儲系統,和memcached類似,它支持存儲的value類型相對更多 。包括String list set zset hash,這些數據類型都支持push/pop add/remove及取交集並集和差集及更豐富的操作
這些操作都是原子性的,並且,redis支持各種不同方式的排序,與memcached一樣,為了保證效率,數據都是存儲在內存中的,區別就是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件
並且在此基礎上實現master-slave(主從)同步
1、准備工作,這里安裝的redis版本是5.0.5,安裝目錄如下:
2.啟動redis
修改redis.conf里面的daeminize no 改成yes,讓服務在后台啟動
3、啟動命令,在bin目錄下可以看到有redis-server和redis-cli
執行redis-server /usr/local/redis-5.0.5/redis.conf
啟動客戶端訪問:redis-cli -p 6379
用ping驗證,返回pong則成功
4、rdb持久化兩種模式,手動和自動,先看一下自動的配置,在 redis.conf 配置文件中的 SNAPSHOTTING 下
默認如下配置:
看一下其他參數
參數解釋:
stop-writes-on-bgsave-error :默認值為yes。當啟用了RDB且最后一次后台保存數據失敗,Redis是否停止接收數據。這會讓用戶意識到數據沒有正確持久化到磁盤上,否則沒有人會注意到災難(disaster)發生了。如果Redis重啟了,那么又可以重新開始接收數據了
rdbcompression ;默認值是yes。對於存儲到磁盤中的快照,可以設置是否進行壓縮存儲。如果是的話,redis會采用LZF算法進行壓縮。如果你不想消耗CPU來進行壓縮的話,可以設置為關閉此功能,但是存儲在磁盤上的快照會比較大。
rdbchecksum :默認值是yes。在存儲快照后,我們還可以讓redis使用CRC64算法來進行數據校驗,但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升,可以關閉此功能。
dbfilename :設置快照的文件名,默認是 dump.rdb
dir:設置快照文件的存放路徑,這個配置項一定是個目錄,而不能是文件名。默認是和當前配置文件保存在同一目錄。
也就是說通過在配置文件中配置的 save 方式,當實際操作滿足該配置形式時就會進行 RDB 持久化,將當前的內存快照保存在 dir 配置的目錄中,文件名由配置的 dbfilename 決定。
5、這里改一下快照保存時間方便測試
6.啟動redis后,2分鍾內操作10次
查看usr/local/bin目錄下會發現兩分鍾后出現dump6379.rdb的文件
注:如果redis被執行shutdown關閉,這個時候也會產生dump6379.rdb文件
7、手動保存快照
save命令,只管保存,其他不管,全部阻塞,如果內存比較大,就會造成長時間的阻塞
bgsave命令,執行該命令時,Redis會在后台異步進行快照操作,快照同時還可以響應客戶端請求。具體操作是Redis進程執行fork操作創建子進程,
RDB持久化過程由子進程負責,完成后自動結束。阻塞只發生在fork階段,一般時間很短。
8、rdb備份
通過config get dir 查詢rdb文件目錄,將rdb文件拷貝到其他目錄下
9、rdb恢復
把備份文件拷貝到工作目錄下,啟動redis 備份數據會直接加載
10、rdb的優缺點
優點:節省磁盤空間,恢復速度快
缺點:雖然redis在fork是使用了寫時復制技術,但是如果數據龐大的時,還是比較消耗性能
在備份周期在一定的時間間隔做一次備份,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改