liunx篇】 十二. Redis持久化機制和內存回收機制 五

中國加油,武漢加油!

篇幅較長,配合目錄觀看

案例準備

  1. 本案例基於liunx篇】 十二. Redis發佈訂閱和超時指令 四

1. Redis持久化機制

Redis會定期的把內存中的數據持久化到硬盤上,當Redis服務關閉後,重啓Redis會自動把硬盤的數據恢復到內存中繼續使用。

1.1 Redis兩種持久化方式

1.1.1 RDB(快照,默認的方式)

  1. 記錄當前Reids一瞬間的內存結構,以文件的形式保存的硬盤上。
  2. save: 手動進行快照,這個過程是前臺快照,在執行的快照的的過程中,Redis是拒絕寫命令的。
  3. bgsave: 手動進行快照,這個過程是後臺快照,Redis會啓動一個新的線程執行快照,當前線程是接收執行寫命令的(它是把寫的命令放到緩存中)

1.1.1.1 修改配置

cd /usr/local/redis3/bin
vim redis.conf
save 900 1   # 配置快照的頻率,意思是900s之內有1個數據發送了變化就拍快照。
save 300 10
save 60 10000 
stop-writes-on-bgsave-error yes # 因爲bgsave命令是啓動一個新的線程執行快照,當前線程還是接收寫命令的,如果新線程在執行快照的過程中出現錯誤是否停止寫命令,默認是yes,這樣用戶可以感知到執行快照失敗。 
rdbchecksum yes # 快照時檢查快照的完整性
dbfilename dump.rdb  # 生成快照文件的名字(可以把這個文件發送給別人,啓動後緩存就會有的對應的數據)
dir ./   #快照文件存放的位置

1.1.2 AOF(只追加文件)

AOF把服務器執行的所有寫(增刪改)的命令記錄在一個文件中,並在服務器啓動時,通過重新執行這些命令來還原數據集。

1.1.2.1 修改配置

appendonly no # 是否開啓只追加文件
appendfilename "appendonly.aof" # 只追加文件的名稱
# 只追加文件記錄評率
# appendfsync always # 每次執行寫操作後記錄到只追加文件中(絕對安全)
appendfsync  everysec # 每秒中記錄一次只追加文件(默認值)
# appendfsync  no # 不主動記錄只追加文件,需要手動記錄
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb # 只追加文件的大小,超過64兆新建一個文件記錄命令
aof-load-truncated yes # 如果最後一個命令出現錯誤,是否丟棄。

1.2 快照 VS 只追加文件

  1. 快照:記錄和恢復的速度快,數據的安全性不高(因爲他是按照時間來記錄的)
  2. 只追加文件:記錄和恢復的速度慢(命令一旦很多久執行慢),數據安全性高(因爲最多隻丟失1s的數據)
  3. 如果Redis只是作爲緩存服務器話,快照和只追加文件都可以關閉,這樣可以大大的提高Redis讀寫性能,如果對數據要求安全性很高,則兩個都可以開啓。

2. Reids內存回收機制

cd /usr/local/redis3/bin
vim redis.conf
算法名稱 算法描述
volatile-lru 只限於設置了 expire 的部分; 優先刪除最近最少使用的 key
allkeys-lru 所有key通用; 優先刪除最近最少使用的 key
volatile-random 採用隨機淘汰策略刪除超時的鍵值對
allkeys-random 只限於設置了 expire 的部分; 隨機刪除一部分 key
volatile-ttl 只限於設置了 expire 的部分; 優先刪除剩餘時間短的key
noeviction 不淘汰任何鍵值對,當內存已滿,只支持讀,不支持寫

2.1 注意

爲了提高垃圾回收的策略,LRU和TTL算法都不是精確的算法,而是一個近似的算法。
就是他會根據探測樣本的數量設置,來進行探測,然後根據探測到這幾個進行淘汰。
LRU:看命中率

maxmemory-samples 5 #設置抽取的樣本數量

2.2 總結

  1. 默認的回收策略:默認不回收
  2. 設置回收的算法:LRU,random,TTL
  3. 算法不是精確的,而是採樣的方式,可以設置採樣的個數,默認是5個
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章