今天小編分享的是關(guān)于Redis持久化快照的方法與原理介紹,可能大家對Redis并不陌生,或者從來沒有了解過Redis。但是不用擔(dān)心,今天小編會(huì)以最簡單的描述來講解Redis的原理。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比宜陽網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式宜陽網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋宜陽地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。所謂的持久化就是保持我們的數(shù)據(jù)不丟失,將數(shù)據(jù)通常保存在我們的硬盤中。在Redis中持久化的方式有兩種,一種是快照持久化,一種是AOF持久化,各有各的優(yōu)缺點(diǎn),在項(xiàng)目中我們得根據(jù)實(shí)際的情況來選擇具體的持久化方式。
快照持久化(RDB)
也叫RDB持久化方式,就是通過拍攝快照的方式實(shí)現(xiàn)持久化,將某個(gè)時(shí)間的內(nèi)存數(shù)據(jù)存儲(chǔ)在一個(gè)rdb文件中,在redis服務(wù)重新啟動(dòng)的時(shí)候加載文件中的數(shù)據(jù)
配置持久化快照
redis中的快照持久化默認(rèn)是開啟的,在redis.conf配置文件中有相關(guān)的配置選項(xiàng)
################################ SNAPSHOTTING ################################ # # Save the DB on disk: # # save# # Will save the DB if both the given number of seconds and the given # number of write operations against the DB occurred. # # In the example below the behaviour will be to save: # after 900 sec (15 min) if at least 1 key changed # after 300 sec (5 min) if at least 10 keys changed # after 60 sec if at least 10000 keys changed # # Note: you can disable saving completely by commenting out all "save" lines. # # It is also possible to remove all the previously configured save # points by adding a save directive with a single empty string argument # like in the following example: # # save "" save 900 1 #900秒內(nèi)至少有1個(gè)key被更改就執(zhí)行快照 save 300 10 #300內(nèi)描述至少有10個(gè)key被更改就執(zhí)行快照 save 60 10000 #60秒內(nèi)至少有10000個(gè)key被更改就執(zhí)行快照 # By default Redis will stop accepting writes if RDB snapshots are enabled # (at least one save point) and the latest background save failed. # This will make the user aware (in a hard way) that data is not persisting # on disk properly, otherwise chances are that no one will notice and some # disaster will happen. # # If the background saving process will start working again Redis will # automatically allow writes again. # # However if you have setup your proper monitoring of the Redis server # and persistence, you may want to disable this feature so that Redis will # continue to work as usual even if there are problems with disk, # permissions, and so forth. stop-writes-on-bgsave-error yes #拍攝快照失敗是否繼續(xù)執(zhí)行寫命令 # Compress string objects using LZF when dump .rdb databases? # For default that's set to 'yes' as it's almost always a win. # If you want to save some CPU in the saving child set it to 'no' but # the dataset will likely be bigger if you have compressible values or keys. rdbcompression yes #是否對快照文件進(jìn)行壓縮 # Since version 5 of RDB a CRC64 checksum is placed at the end of the file. # This makes the format more resistant to corruption but there is a performance # hit to pay (around 10%) when saving and loading RDB files, so you can disable it # for maximum performances. # # RDB files created with checksum disabled have a checksum of zero that will # tell the loading code to skip the check. rdbchecksum yes #是否進(jìn)行數(shù)據(jù)校驗(yàn) # The filename where to dump the DB dbfilename dump.rdb #快照文件存儲(chǔ)的名稱 # The working directory. # # The DB will be written inside this directory, with the filename specified # above using the 'dbfilename' configuration directive. # # The Append Only File will also be created inside this directory. # # Note that you must specify a directory here, not a file name. dir /opt/redis-5.0.3#快照文件存儲(chǔ)的位置
驗(yàn)證效果
1、進(jìn)入安裝目錄,如果有dump.db文件就刪除
2、啟動(dòng)redis,然后添加幾個(gè)數(shù)據(jù),然后關(guān)閉redis退出
[root@root redis-5.0.3]# src/redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name aaa OK 127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> incr age (integer) 19 127.0.0.1:6379> shutdown not connected> exit
3、在我們的安裝的目錄下就生成一個(gè)dump.rdb文件,這個(gè)就是我們的快照備份文件
4、再次啟動(dòng)redis,進(jìn)入發(fā)現(xiàn)原來的數(shù)據(jù)還在,這是因?yàn)閞edis啟動(dòng)的時(shí)候加載了備份文件中的數(shù)據(jù)。
[root@root redis-5.0.3]# src/redis-server redis.conf 1211:C 13 Feb 2019 01:27:22.668 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1211:C 13 Feb 2019 01:27:22.668 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=1211, just started 1211:C 13 Feb 2019 01:27:22.668 # Configuration loaded [root@root redis-5.0.3]# src/redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> get name "aaa" 127.0.0.1:6379> get age "19" 127.0.0.1:6379> keys * 1) "name" 2) "age"
5、關(guān)閉退出
關(guān)閉退出后刪除dump.rdb文件,啟動(dòng)后發(fā)現(xiàn)數(shù)據(jù)沒有了
[root@root redis-5.0.3]# src/redis-server redis.conf 1218:C 13 Feb 2019 01:29:01.336 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1218:C 13 Feb 2019 01:29:01.336 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=1218, just started 1218:C 13 Feb 2019 01:29:01.336 # Configuration loaded [root@root redis-5.0.3]# src/redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> keys * (empty list or set)
快照持久化原理
save命令:
在redis運(yùn)行中,我們可以顯示的發(fā)送一條save命令來拍攝快照。save命令是阻塞命令,也就是當(dāng)服務(wù)器接收了一條save命令之后就會(huì)開始拍攝快照,在此期間不會(huì)再去處理其他的請求,其他請求會(huì)被掛起直到備份結(jié)束
bgsave命令
bgsave命令也是立即拍攝快照,有別于save命令,bgsave并不是一條阻塞命令,而是fork一個(gè)子線程,然后這個(gè)子線程負(fù)責(zé)備份操作。而父進(jìn)程繼續(xù)處理客戶端的請求,這樣就不會(huì)造成阻塞了。
127.0.0.1:6379> ping PONG 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> set age 20 OK 127.0.0.1:6379> bgsave Background saving started
4、shutdown命令
當(dāng)我們只想shutdown命令的時(shí)候。服務(wù)器會(huì)自動(dòng)發(fā)送一條save命令來完成快照操作。并在完成備份操作后關(guān)閉服務(wù)器。所以我們當(dāng)我們的操作不滿足前面三種情況的時(shí)候關(guān)閉服務(wù)器后,再次打開我們的數(shù)據(jù)也不會(huì)丟失。
5、sync命令
當(dāng)在主從環(huán)境中,從節(jié)點(diǎn)要同步主節(jié)點(diǎn)的數(shù)據(jù)的時(shí)候會(huì)發(fā)送一條sync命令來開發(fā)一次復(fù)制。此時(shí)主節(jié)點(diǎn)會(huì)發(fā)送一條bgsave命令來fork一個(gè)新的線程來完成快照并在bgsave命令操作結(jié)束后將快照文件發(fā)送給從節(jié)點(diǎn)來完成主從節(jié)點(diǎn)的數(shù)據(jù)的同步。
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
RDB文件保存了某個(gè)時(shí)間點(diǎn)的redis數(shù)據(jù),適合備份,你可以設(shè)定一個(gè)時(shí)間點(diǎn)對RDB文件進(jìn)行歸檔,這樣就能在需要的時(shí)候很輕易的把數(shù)據(jù)恢復(fù)到不同的版本。 RDB很適合用于災(zāi)備。單文件很方便就能傳輸?shù)竭h(yuǎn)程的服務(wù)器上。在數(shù)據(jù)量比較打的情況下,RDB啟動(dòng)速度快.
缺點(diǎn)
RDB容易造成數(shù)據(jù)丟失,如果設(shè)置3分鐘保存一次,如果redis因?yàn)橐恍┰虿荒苷9ぷ?那么從上次產(chǎn)生快照到Redis出現(xiàn)問題這段時(shí)間的數(shù)據(jù)就會(huì)丟失了。
如何禁用快照持久化
1、在redis.conf配置文件中注釋掉所有的save配置 2.在最后一條save配置追加吃命令
save ""
AOF持久化
與快照持久化通過直接保存 Redis 的鍵值對數(shù)據(jù)不同,AOF 持久化是通過保存 Redis 執(zhí)行的寫命令來記錄 Redis 的內(nèi)存數(shù)據(jù)。理論上說,只要我們保存了所有可能修改 Redis 內(nèi)存數(shù)據(jù)的命令(也就是寫命令),那么根據(jù)這些保存的寫命令,我們可以重新恢復(fù) Redis 的內(nèi)存狀態(tài)。AOF 持久化正是利用這個(gè)原理來實(shí)現(xiàn)數(shù)據(jù)的持久化與數(shù)據(jù)的恢復(fù)的
開啟AOF
在redis中aof默認(rèn)是關(guān)閉的,我們需要修改配置文件開啟aof
appendonly yes appendfilename "appendonly.aof" # If unsure, use "everysec". # appendfsync always appendfsync everysec # appendfsync no no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
關(guān)閉快照持久化
save "" #save 900 1 #save 300 10 #save 60 10000
驗(yàn)證,重啟服務(wù)
執(zhí)行簡單的命令操作我們可以看到append.aof文件中存儲(chǔ)的內(nèi)容就是我們執(zhí)行的命令
AOF持久化備份的注意點(diǎn)
1.appendfsync的取值有三個(gè),分別是everysec,always和no,在這里我們推薦使用everysec,不推薦使用always。因?yàn)閍lways會(huì)嚴(yán)重影響服務(wù)器的性能 2.everysec最壞的情況也就只會(huì)丟失1秒的數(shù)據(jù),影響在可控范圍之內(nèi)。
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
AOF 持久化的方法提供了多種的同步頻率,即使使用默認(rèn)的同步頻率每秒同步一次,Redis 最多也就丟失 1 秒的數(shù)據(jù)而已。 AOF 文件的格式可讀性較強(qiáng),這也為使用者提供了更靈活的處理方式。例如,如果我們不小心錯(cuò)用了 FLUSHALL 命令,在重寫還沒進(jìn)行時(shí),我們可以手工將最后的 FLUSHALL 命令去掉,然后再使用 AOF 來恢復(fù)數(shù)據(jù)。
缺點(diǎn)
雖然 AOF 提供了多種同步的頻率,默認(rèn)情況下,每秒同步一次的頻率也具有較高的性能。但在 Redis 的負(fù)載較高時(shí),RDB 比 AOF 具好更好的性能保證。 RDB 使用快照的形式來持久化整個(gè) Redis 數(shù)據(jù),而 AOF 只是將每次執(zhí)行的命令追加到 AOF 文件中,因此從理論上說,RDB 比 AOF 方式更健壯
持久化的一些使用建議
1、如果redis僅僅是用來做為緩存服務(wù)器的話,我們可以不使用任何的持久化。
2、一般情況下我們會(huì)將兩種持久化的方式都開啟。redis優(yōu)先加載AOF文件來回復(fù)數(shù)據(jù)。RDB的好處是快速。
3、在主從節(jié)點(diǎn)中,RDB作為我們的備份數(shù)據(jù),只在salve(從節(jié)點(diǎn))上啟動(dòng),同步時(shí)間可以設(shè)置的長一點(diǎn),只留(save 900 1)這條規(guī)則就可以了。
以上就是關(guān)于Redis持久化快照的方法與原理介紹的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果如果想了解更多,歡迎來創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。