目錄
- 一、Redis持久化
-
- 1.1 概述
- 1.2 持久化分類
- 1.3 RDB持久化
-
- 1.3.1 觸發條件
- 1.3.2 優缺點
- 1.4 AOF持久化
- 1.4.1 概述
- 1.4.2 AOF重寫機制
- 1.5 Redis性能管理
- 1.6 記憶體碎片率
- 1.7 記憶體使用率
- 1.8 回收key
一、Redis持久化
1.1 概述
●Redis是運作在記憶體中,記憶體中的資料斷電丢失,為了能後重用Redis資料,或者防止系統故障,我們需要将Redis中的資料寫入到磁盤空間中,即持久化。
1.2 持久化分類
●RDB方式:建立快照的方式擷取某一時刻Redis中所有資料的副本
●AOF方式:将執行的寫指令寫到檔案的末尾,以日志的方式來記錄資料的變化
1.3 RDB持久化
●是Redis預設的持久化方式
●預設檔案名為dump.rdb
cd /var/lib/redis/6379/
ls
dump.rdb
1.3.1 觸發條件
●在指定的時間間隔内,執行指定次數的寫操作(配置檔案控制)
●執行save或者是bgsave(異步)指令
●執行flushall指令,清空資料庫所有資料
●執行shutdown指令,保證伺服器正常關閉且不丢失任何資料
1.3.2 優缺點
●适合大規模的資料恢複
●如果業務對資料完整性和一緻性要求不高,RDB是很好的選擇
●資料的完整性和一緻性不高
●備份時占用記憶體
●通過RDB檔案恢複資料
實作:将dump.rdb檔案拷貝到redis的安裝目錄的bin目錄下,重新開機redis服務即可
配置RDB持久化
[[email protected] 6379]# vim /etc/redis/6379.conf '//修改配置檔案’
‘//搜尋save,找到如下’
save 900 1 ‘//900秒之内至少一次寫操作’
save 300 10 ‘//300秒内至少10次寫操作’
save 60 10000 ‘//60秒内至少10000次寫操作’
‘//隻要滿足其一都會觸發快照操作,注釋所有的save項表示關閉RDB’
dbfilename dump.rdb ‘//RDB檔案名稱’
dir /var/lib/redis/6379 ‘//RDB檔案路徑’
rdbcompression yes ‘//開啟了壓縮功能’
1.4 AOF持久化
1.4.1 概述
●Redis預設不開啟
●彌補RDB的不足(資料的不一緻性)
●采用日志的形式來記錄每個寫操作,并追加到檔案中
●Redis重新開機會根據日志檔案的内容将寫指令從前到後執行一次以完成資料的恢複工作
●根據AOF檔案恢複資料
實作:将appendonly.aof檔案拷貝到redis安裝目錄的bin目錄下,重新開機redis服務即可配置AOF持久化
[[email protected] 6379]# vim /etc/redis/6379.conf
appendonly no ‘//修改為yes即可開啟AOF持久化’
appendfilename “appendonly.aof” ‘//AOF檔案名稱’
# appendfsync always ‘//always:同步持久化,每次發生資料變化會立刻寫入磁盤’
appendfsync everysec ‘//everysec:預設推薦,每秒異步記錄次(預設值)’
# appendfsync no ‘//no:不同步,交給作業系統決定如何同步’
‘//取消注釋的時候注意前方空格,一定要删掉’
aof-load-truncated yes ‘//忽略最後一條可能存在問題的指令’
1.4.2 AOF重寫機制
AOF的工作原理是将寫操作追加到檔案中,檔案的備援内容會越來越多
當AOF檔案的大小超過所設定的閥值時,Redis就會對AOF檔案的内容壓縮
原理
Redis會fork出一條新程序,讀取記憶體中的資料(并沒有讀取舊檔案),并重新寫到一個臨時檔案中,最後替換舊的aof檔案
配置AOF重寫
[[email protected] 6379]# vim /etc/redis/6379.conf
no-appendfsync-on-rewrite no ‘//在日志進行BGREWRITEAOF時, 如果設定為yes表示新寫操作不進行同步fsync,隻暫存在緩沖區裡,避免造成磁盤I0操作沖突,等重寫完成後在寫入。redis中預設為no’
auto-aof-rewrite-percentage 100 ‘//目前AOF檔案大小是上次日志重寫時AOF檔案大小兩倍時,發生BGREWRITEAOF操作’
auto-aof-rewrite-min-size 64mb ‘//目前AOF檔案執行BGREWRITEAOF指令的最小值,避免剛開始啟動Reids時由于檔案尺寸較小導緻頻繁的BGREWRITEAOF.當AOF檔案到達64M的時候,發生BGREWRITEAOF操作’
1.5 Redis性能管理
’//檢視Redis記憶體使用’
[[email protected] 6379]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> INFO memory
…省略内容
1.6 記憶體碎片率
●操系統配置設定的記憶體值used_ memory rss除以redis使用的記憶體值
●used _memory計算得出
●記憶體碎片是由作業系統低效的配置設定/回收實體記憶體導緻的
●不連續的實體記憶體配置設定
●跟蹤記憶體碎片率對了解redis執行個體的資源性能是非常重要的
●記憶體碎片率稍大于1是合理的,這個值表示記憶體碎片率比較低
●記憶體碎片率超過1.5,說明redis消耗了實際需要實體記憶體的150%,其中50%是記憶體碎片率
●記憶體碎片率低于1的,說明Redis記憶體配置設定超出了實體記憶體,作業系統正在進行記憶體交換
1.7 記憶體使用率
●redis執行個體的記憶體使用率超過可用最大記憶體,作業系統将開始進行
●記憶體與swap空間交換
●避免記憶體交換
●針對緩存資料大小選擇
●盡可能的使用Hash資料結構
●設定key的過期時間
1.8 回收key
●保證合理配置設定redis有限的記憶體資源
●當記憶體使用達到設定的最大閥值時,需要選擇一種key的回收政策
●預設情況下回收政策是禁止删除
●redis.conf配置檔案中修改maxmemory-policy屬性值
●volatile-lru:使用LRU算法從已設定過期時間的資料集合中淘汰資料
●volatile-ttl:從已設定過期時間的資料集合中挑選即将過期的資料淘汰(建議使用)
●volatile-random:從已設定過期時間的資料集合中随機挑選資料淘汰
●allkeys-lru:使用LRU算法從所有資料集合中淘汰資料
●allkeys-random:從資料集合中任意選擇資料淘汰
●no-enviction:禁止淘汰資料