自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis6的持久化配置,你知道多少?

存儲 存儲軟件 Redis
我們都知道Redis是一個基于內(nèi)存的數(shù)據(jù)庫,如果沒有給Redis配置持久化的話,每當重啟后Redis的數(shù)據(jù)就會全部丟失,會很麻煩。因此Redis需要開啟持久化功能,將數(shù)據(jù)保存到磁盤上,當Redis重啟后可以在磁盤中恢復數(shù)據(jù)。這樣緩存數(shù)據(jù)就不容易丟失了。

本文轉載自微信公眾號「零零后程序員小三」,作者003 。轉載本文請聯(lián)系零零后程序員小三公眾號。

 本文是對Redis6的持久化配置,了解什么是AOF和RDB,它們的優(yōu)缺點是什么,該如何使用。

什么是Redis持久化?

我們都知道Redis是一個基于內(nèi)存的數(shù)據(jù)庫,如果沒有給Redis配置持久化的話,每當重啟后Redis的數(shù)據(jù)就會全部丟失,會很麻煩。因此Redis需要開啟持久化功能,將數(shù)據(jù)保存到磁盤上,當Redis重啟后可以在磁盤中恢復數(shù)據(jù)。這樣緩存數(shù)據(jù)就不容易丟失了。

開啟持久化的兩種方式

Redis開啟持久化有兩種方式:RDB(Redis DataBase)與AOF(append only file)

RDB持久化

RDB其實就是把數(shù)據(jù)以快照的形式保存到磁盤上。什么是快照呢?你可以把快照理解成當前這一時刻的數(shù)據(jù)拍成一張照片保存下來。RDB持久化是指在指定的時間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照形式寫入磁盤。也是默認的持久化方式,這種方式就是將內(nèi)存中的數(shù)據(jù)寫入到二進制文件當中,默認的文件名為dump.rdb

既然RDB機制是通過某個時刻把所有數(shù)據(jù)生成一張快照來進行保存的,那么就應該會有一種觸發(fā)機制來實現(xiàn)這個過程。對于RDB來說,提供了三種機制:save、bgsave、自動化。

1.save觸發(fā)方式:該命令會阻塞當前Redis服務器,執(zhí)行save命令的時候,Redis不能處理其他的命令,直到RDB過程執(zhí)行完成為止。執(zhí)行完成的時候如果存在老的RDB文件,就會把新的替換掉舊的。

2.bgsave觸發(fā)方式:執(zhí)行該命令的時候,Redis會在后臺進行異步快照操作,快照的同時還可以響應客戶端的請求,具體的操作是Redis進程執(zhí)行fork操作創(chuàng)建了一個子進程,而RDB持久化過程由子進程負載,完成后自動結束。阻塞只發(fā)生在子進程。

3.自動化觸發(fā):由配置文件來完成,配置觸發(fā)Redis的RDB持久化條件。

「RDB有何優(yōu)缺點?」

優(yōu)點:

(1)RDB文件緊湊,全量備份,比較適用于備份和災難恢復

(2)生成RDB文件的時候,Redis主進程會開啟讓一個子進程來完成所有的保存操作,主進程不需要任何的IO操作

(3)RDB在恢復大數(shù)據(jù)集的時候速度快。

缺點:

因為RDB快照是一次全量備份的,存儲的是內(nèi)存數(shù)據(jù)二進制形式,在存儲上會非常的緊湊。當進行快照持久化時,會開啟一個子進程負載快照的持久化,子進程會擁有父進程的內(nèi)存數(shù)據(jù),父進程修改內(nèi)存子進程不會反應出來,所有當在快照持久化時修改的數(shù)據(jù)不會得以保存,還有可能導致丟失數(shù)據(jù)。

核心配置:(dbfilename 文件名,dir持久化文件的路徑)

  1. #任何ip可以訪問 
  2. bind 0.0.0.0 
  3. #守護進程 
  4. daemonize yes 
  5. #密碼 
  6. requirepass 123456 
  7. #⽇志⽂件 
  8. logfile "/usr/local/redis/log/redis.log" 
  9. #持久化⽂件名稱 
  10. dbfilename xdclass.rdb 
  11. #持久化⽂件存儲路徑 
  12. dir /usr/local/redis/data 
  13. #持久化策略, 10秒內(nèi)有個1個key改動,執(zhí)⾏快照 
  14. save 10 1 
  15. ######之前配置###### 
  16. #導出rdb數(shù)據(jù)庫⽂件壓縮字符串和對象,默認是yes,會浪費 
  17. CPU但是節(jié)省空間 
  18. rdbcompression yes 
  19. # 導⼊時是否檢查 
  20. rdbchecksum yes 

RDB操作實戰(zhàn)

配置文件(根據(jù)自行需要配置)

  1. bind 0.0.0.0 
  2. daemonize yes 
  3. requirepass 123456Xdclass 
  4. logfile "/usr/local/redis/log/redis.log" 
  5. dbfilename xdclass.rdb 
  6. dir /usr/local/redis/data 
  7. #關閉rdb 
  8. #save "" 
  9. #10秒2個key變動則觸發(fā)rdb 
  10. save 10 2 
  11. #100秒5個key變動則觸發(fā)rdb 
  12. save 100 5 
  13. #壓縮 
  14. rdbcompression yes 
  15. #檢查 
  16. rdbchecksum yes 

備注:Linux內(nèi)存分配策略,0表示內(nèi)核將檢查是否有足夠的內(nèi)存供應用進程所使用;如果有足夠內(nèi)存則申請允許;否則申請失敗,并發(fā)錯誤返回給應用進程

1表示內(nèi)核允許分配所有的物理內(nèi)存,而不管當前的內(nèi)存狀態(tài)如何

2表示內(nèi)核允許分配超過所有物理內(nèi)存和交換總和內(nèi)存

  1. 解決⽅式 
  2. echo 1 > /proc/sys/vm/overcommit_memory 
  3.  
  4. 持久化配置 
  5. vim /etc/sysctl.conf 
  6.  
  7. 改為 
  8. vm.overcommit_memory=1 
  9. 修改sysctl.conf后,需要執(zhí)⾏ sysctl -p 以使⽣效。 

AOF持久化

上面介紹了RDB持久化是全量備份的,但這種備份總是耗時的,有時候我們提供了一種更為高效的方式AOF,工作機制很簡單,Redis會將每一個收到的命令都通過write函數(shù)追加到文件中。通俗點理解就是像日志記錄一樣。

配置:

與RDB配置方式不一樣

  1. appendonly yes 默認為不開啟 
  2. AOF文件名通過appendfilename配置設置,默認文件名為appendonly.aof 
  3. 存儲路徑同RDB持久化方式一致,使用dir配置 
  1. bind 0.0.0.0 
  2. daemonize yes 
  3. requirepass 123456Xdclass 
  4. logfile "/usr/local/redis/log/redis.log" 
  5. dbfilename xdclass.rdb 
  6. dir /usr/local/redis/data 
  7. #save 10 2 
  8. #save 100 5 
  9. save "" 
  10. rdbcompression yes 
  11. #對rdb數(shù)據(jù)進⾏校驗,耗費CPU資源,默認為yes 
  12. rdbchecksum yes 
  13. appendonly yes 
  14. appendfilename "appendonly.aof" 
  15. appendfsync everysec 

AOF核心原理

(1)Redis每次寫入命令會追加到aof_buf緩沖區(qū)中

(2)AOF緩沖區(qū)根據(jù)對應的策略向硬盤做同步的操作

(3)高頻AOF會帶來影響,特別是每次刷盤

AOF三種觸發(fā)機制

(1)每修改同步always:同步持久化 每次發(fā)送數(shù)據(jù)更變會立即被記錄到磁盤中,性能較差但是數(shù)據(jù)保存的完整性比較好

(2)每秒同步everysec:異步操作,每秒記錄,如果一秒內(nèi)宕機的話,會造成數(shù)據(jù)丟失。

(3)不同no:從不同步

AOF有何優(yōu)缺點?

優(yōu)點:

(1)AOF可以更好的對數(shù)據(jù)保護,不讓數(shù)據(jù)丟失。一般AOF會每隔一秒,通過后臺線程執(zhí)行一次fsync操作,最多丟失一秒鐘的數(shù)據(jù)

(2)AOF日志文件沒有任何磁盤尋址的開銷,寫入性能非常高,文件也不容易損壞。

(3)AOF日志文件的命令擁有很好的可讀方式進行記錄,因為這個特征非常適合做災難性的誤刪除恢復。

缺點:

(1)對于同一份數(shù)據(jù)來說的話,AOF文件的日志通常要比RDB數(shù)據(jù)快照文件要更大。

(2)AOF開啟后,支持的寫QPS會比RDB支持的寫QPS低,因為AOF一般配置成每秒fsync一次日志文件。

AOF配置實戰(zhàn)

「文件重新原理」

AOF的方式也同時帶來了另一個問題。持久化文件會變得越來越大,為了壓縮aof持久化文件。Redis提供了一個barewriteaof命令。來講內(nèi)存中的數(shù)據(jù)以命令的形式保存到臨時文件中,同時會開啟一條新進程來重寫,重寫aof文件的操作,并沒有讀取舊的aof文件,而是把整個內(nèi)存中的數(shù)據(jù)庫內(nèi)容用命令的形式重寫了一個新的aof文件,這個和快照有點類似。

重寫觸發(fā)配置

手動觸發(fā):直接調用bgrewriteaof命令

自動觸發(fā):auto-aof-rewrite-min-size和auto-aof-rewrite-percentage參數(shù)(auto-aof-rewrite-min-size表示AOF重寫文件最小體積,默認為64MB;auto-aof-rewrite-percentage代表AOF文件空間和上一次重寫后AOF文件空間的比值)

常用配置

  1. # 是否開啟aof 
  2. appendonly yes 
  3. # ⽂件名稱 
  4. appendfilename "appendonly.aof" 
  5. # 同步⽅式 
  6. appendfsync everysec 
  7. # aof重寫期間是否同步 
  8. no-appendfsync-on-rewrite no 
  9. # 重寫觸發(fā)配置 
  10. auto-aof-rewrite-percentage 100 
  11. auto-aof-rewrite-min-size 64mb 
  12. # 加載aof時如果有錯如何處理 
  13. # yes表示如果aof尾部⽂件出問題,寫log記錄并繼續(xù)執(zhí)⾏。 
  14. no表示提示寫⼊等待修復后寫⼊ 
  15. aof-load-truncated yes 

在線上,我們到底該怎么做?

(1)RDB持久化與AOF持久化起使

(2)如果Redis中的數(shù)據(jù)并不是特別敏感或者可以通過其它?式重寫?成數(shù)據(jù)

(3)集群中可以關閉AOF持久化,靠集群的備份?式保證可?性

(4)??制定策略定期檢查Redis的情況,然后可以?動觸發(fā)備份、重寫數(shù)據(jù);

(5)采?集群和主從同步

在Redis4.0后支持混合模式

RDB和AOF可以一起用了,直接將RDB持久化的方式來操作二進制內(nèi)容覆蓋到AOF文件中,因為RDB是二進制,所以很小。有寫入的話還是繼續(xù)append追加到文件的原始命令,等下次文件過大的時候在次rewrite,所以在企業(yè)中這種混合模式是比較常見的。

 

責任編輯:武曉燕 來源: 零零后程序員小三
相關推薦

2021-09-02 09:53:42

開發(fā)Redis配置

2021-09-01 09:44:16

Redis持久化配置

2024-04-17 08:35:04

Lua腳本Redis數(shù)據(jù)結構

2023-03-23 08:11:59

2021-03-06 08:10:16

Redis6 Java架構分布式框架

2022-08-11 08:46:23

索引數(shù)據(jù)結構

2024-05-06 00:30:00

MVCC數(shù)據(jù)庫

2018-09-30 08:42:10

2018-01-02 09:31:12

大數(shù)據(jù)數(shù)據(jù)互聯(lián)網(wǎng)

2019-05-08 16:00:48

人工智能人臉識別刷臉

2023-08-28 07:39:49

線程調度基本單位

2021-07-26 23:57:48

Vuex模塊項目

2024-05-28 10:08:05

2024-12-20 12:15:06

RedisRDB持久化

2023-08-02 08:14:33

監(jiān)控MTS性能

2022-03-23 15:36:13

數(shù)字化轉型數(shù)據(jù)治理企業(yè)

2018-08-24 06:56:17

2011-06-24 17:30:34

網(wǎng)站權重

2023-10-12 13:01:29

Redis數(shù)據(jù)庫

2020-03-03 14:15:49

Redis持久化數(shù)據(jù)庫
點贊
收藏

51CTO技術棧公眾號