Redis數據存儲

1 數據存儲

Redis是基於內存的緩存中間件,共有5種存儲數據的方式,分別爲string,list,set,zset和hash,同時,Redis具備持久化數據的功能,即RDB和AOF,默認爲RDB方式。

2 數據備份

數據持久化到磁盤:rdb和aof兩種方式,默認rdb方式。

2.1 快照持久化

快照持久化即RDB持久化數據是將當前數據庫中的數據備份到*.rdb文件中,配置文件:

# 備份文件名稱:dump.rdb
dbfilename dump.rdb
# 備份文件位置
dir /var/lib/redis
# 保存快照
# 格式:save 時間間隔(秒) key改變的最少個數
# save 900 1:每900秒,檢查key改變個數,
# 當至少有1個key改變,則保存快照
save 900 1
save 300 10
save 60 10000

Redis通過saveparam結構體保存save參數

struct{
  time_t seconds;
  int changes;
}

服務器結構體redisSever添加了三個字段:
saveparams:保存所有save參數;
dirty:保存上一次成功執行SAVE或BGSAVE命令之後,服務器對數據庫執行的修改次數;
lastsave:記錄服務器上一次執行SAVE和BGSAVE的UNIX時間戳;

struct{
  struct saveparam *saveparams;
  long long dirty;
  time_t lastsave;
}

rdb文件位置:/var/lib/redis,文件爲dump.rdb,使用vim打開,內容如下:

REDIS0008ú      redis-ver^E4.0.9ú
redis-bitsÀ@ú^EctimeÂ<98>±ª^ú^Hused-memÂ^@^Q^L^@ú^Laof-preambleÀ^@þ^@û^L^H^@^S¬í^@^Et^@^LuserInfosObj^@ü5^@<9c>^Rr^A^@^@^@,refresh:1875c460-2d69-47e3-a240-f0c9020b7b33Ã@üAB^_¬í^@^Esr^@Lorg.springframework.secu^]rity.oauth2.common.DefaultExpi@/^AOA@^\^ZRefreshToken/ßGc<9d>ÐÉ·^B^@^AL^@

持久化的rdb文件爲Redis的數據格式,可看出部分的存儲數據,如refresh。

2.2 AOF持久化

默認情況Redis通過異步轉存數據到磁盤,這種方式可滿足大部分應用需求,但是由於Redis進程問題和斷電會丟失幾分鐘寫入的數據。Append Only File模式是另一種更好的持久化方案,該方式在斷電或單次寫入錯誤(操作系統正常運行)情況下僅會丟失1秒的數據,RDB和AOF兩種方式可以同時使用,若同時使用,默認會載入AOF數據,AOF保存的數據更加可靠(丟失數據更少)。

# 配置,默認no,關閉
appendonly no
# 文件名稱
appendfilename "appendonly.aof"
# 保存週期:共有三種模式
# always:實時保存,AOF緩衝區所有內容寫入並同步到AOF文件中數據安全性高,CPU資源佔用較多
# everysec:每秒同步一次數據,將AOF緩衝區所有數據寫入AOF文件中,並且這個同步操作由一個線程專門負責執行,數據安全性不如always,噹噹服務器出現故障時會出現1s的數據空窗期,但是CPU消耗比always小
# no:將AOF緩衝區所有內容寫入到AOF文件,但不對AOF文件進行同步,何時同步由操作系統決定,CPU消耗較低,但數據安全性較差,且單次同步時間最長
appendfsync everysec

3 問題

3.1 快照持久化失敗

  • 問題
    1871:M 09 May 11:02:15.096 * Background saving started by pid 19285
    19285:C 09 May 11:02:15.096 # Failed opening the RDB file dump.rdb (in server root dir /var/lib/redis) for saving: Permission denied
  • 原因
    *.rdb文件權限不足
  • 方案
    修改*.rdb文件權限,
    文件位置:/var/lib/redis
chmod 766 dump.rdb

4 小結

  • Redis基於內存緩存的中間件,同時具有持久化數據的功能,共有兩種方式:RDB和AOF方式;
  • AOF方式持久化數據最多丟失1秒的數據,RDB依據的規則,會丟失幾分鐘的數據;
  • AOF和RDB持久化數據可同時使用,兩者同時開啓時,默認讀取AOF數據;

【參考文獻】
[1]https://blog.csdn.net/u014466635/article/details/80081378
[2]https://www.cnblogs.com/itdragon/p/7906481.html
[3]https://baijiahao.baidu.com/s?id=1643385491075066750&wfr=spider&for=pc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章