《Redis持久化》要點(diǎn):
本文介紹了Redis持久化,希望對您有用。如果有疑問,可以聯(lián)系我們。
redis是一種可內(nèi)存也可持久化的內(nèi)存數(shù)據(jù)庫,所謂持久化,就是將數(shù)據(jù)放到斷電后數(shù)據(jù)不會丟失的設(shè)備中,也就是通常理解的磁盤上.
whereis redis.conf
redis: /etc/redis.conf
每一個配置項的含義看鏈接:https://redis.io/topics/config
在redis啟動的前提下
config get * //可以看到部分配置項
其他配置項可以通過config get xxx 獲取
并可以使用config set key value進(jìn)行配置
第一種:RDB快照
Redis支持將當(dāng)前數(shù)據(jù)的快照存成一個數(shù)據(jù)文件的持久化機(jī)制.而一個持續(xù)寫入的數(shù)據(jù)庫如何生成快照呢?Redis借助fork命令的copy on write機(jī)制.在生成快照時,將當(dāng)前進(jìn)程fork出一個子進(jìn)程,然后在子進(jìn)程中循環(huán)所有的數(shù)據(jù),將數(shù)據(jù)寫成為RDB文件.
通過Redis的save指令來配置RDB快照生成規(guī)則,配置方式有兩種;
一是配置Redis.conf
二是通過config set 命令在Redis運(yùn)行時配置,不需重啟Redis
查看save規(guī)則:
redis 127.0.0.1:6379> config get save
1) "save"
2) "3600 1 300 100 60 10000"
RDB文件寫操作是在一個新進(jìn)程中進(jìn)行的,子進(jìn)程會先將數(shù)據(jù)寫入臨時文件,然后通過原子性rename系統(tǒng)調(diào)用將臨時文件重命名為RDB文件;當(dāng)然,Redis的RDB文件也是Redis主從同步內(nèi)部實(shí)現(xiàn)中的一環(huán),使用od -c命令查看rdb文件內(nèi)容,可以看到保存的實(shí)際是數(shù)據(jù)本身.
[www@xxxx]$ od -c dump.rdb
0000000 R E D I S 0 0 0 2 376 \0 \0 003 s e x
0000020 004 m a l e \0 004 n a m e 004 j a c k
0000040 377
0000041
第二種:AOF日志
aof全稱append only file,它是一個追加寫入的日志文件.與一般數(shù)據(jù)庫的binlog不同的是,AOF文件是可識別的純文本,它的內(nèi)容就是一個個的Redis標(biāo)準(zhǔn)命令.aof記錄是的寫redis操作的命令集合,而rdb是redis寫操作的數(shù)據(jù)集合.
redis 127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "no"
設(shè)置為yes
redis 127.0.0.1:6379> config set appendonly yes
那么執(zhí)行save/bgsave,就會生成appendonly.aof文件
查看aof文件內(nèi)容,使用od -c appendonly.aof,可以看到內(nèi)容是set命令:
*2
$6
SELECT
$1
0
*3
$3
set
$3
sex
$4
male
*3
$3
set
$4
name
$4
jack
AOF重寫
如果每條寫命令都生成一條日志,那么AOF文件會很大,所以Redis提供了一個功能,AOF rewrite.其功能是重新生成一份AOF文件,新的AOF文件中一條記錄的操作只會有一次,而不像一份老文件那樣,可能記錄了對同一個值的多次操作.其生成過程和RDB類似,也是fork一個進(jìn)程,直接遍歷數(shù)據(jù),寫入新的AOF臨時文件.在寫入新文件的過程中,所有的寫操作日志還是會寫到原來老的AOF文件中,同時還會記錄在內(nèi)存緩沖區(qū)中.當(dāng)重完操作完成后,會將所有緩沖區(qū)中的日志一次性寫入到臨時文件中.然后調(diào)用原子性的rename命令用新的AOF文件取代老的AOF文件.
因此,RDB和AOF操作都是順序IO操作,性能都很高.而同時在通過RDB文件或者AOF日志進(jìn)行數(shù)據(jù)庫恢復(fù)的時候,也是順序的讀取數(shù)據(jù)加載到內(nèi)存中.所以也不會造成磁盤的隨機(jī)讀.
參考文檔:
https://redis.io/topics/config
https://redis.io/topics/persistence
維易PHP培訓(xùn)學(xué)院每天發(fā)布《Redis持久化》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/9228.html