Redis持久化-RDB
rdb方式的持久化是通过快照完成的,当符合一定条件时redis会自动将内存中的所有数据执行快照操作并存储到硬盘上。默认存储在redis根目录的dump.rdb文件中。(文件名在配置文件中dbfilename)

################################ SNAPSHOTTING  ################################
# 存 DB 到磁盘:
#
#   格式:save <间隔时间(秒)> <写入次数>
#
#   根据给定的时间间隔和写入次数将数据保存到磁盘
#
#   下面的例子的意思是:
#   900 秒内如果至少有 1 个 key 的值变化,则保存
#   300 秒内如果至少有 10 个 key 的值变化,则保存
#   60 秒内如果至少有 10000 个 key 的值变化,则保存
#  
#   注意:你可以注释掉所有的 save 行来停用保存功能。
#   也可以直接一个空字符串来实现停用:
#   save ""
save 900 1
save 300 10
save 60 10000

// 这里的意思其实就是save <间隔时间(秒)> <写入次数>,15min的时间内,写入set k1 v1
// 那么这个值redis会自动将内存中的数据进行快照保存到磁盘上,默认保存到dump.rdb文件。
// redis实现持久化默认方式为RDB方式(另一个是aof:Append only file)
// 的持久化是通过快照(snapshotting)完成的.不足之处就是再20min的时候又写入
// set k2 v2,这时候出现故障,redis没有将内存数据存入到磁盘上,换句话说dump.rdb文件
// 中没有k2这个键。这样就会导致数据的丢失。如果想要数据立刻保存到磁盘中可以执行save命令。

#当做快照失败的时候,redis会停止继续向其写入数据,保证第一时间发现redis快照出现问题  
#当然,通过下面配置为 no,即使redis快照失败,也能继续向redis写入数据  
stop-writes-on-bgsave-error yes 
#是否用LZF压缩,使用压缩会占一定的cpu,但不使用压缩,快照会很大 (一般使用默认yes)
 165 rdbcompression yes
# 数据校验,快照末尾会存放一个校验值,保证数据的准确性  
# 但数据校验会使性能下降约10%,默认开启校验 
rdbchecksum yes
#快照的名字 
177 dbfilename dump.rdb

Redis持久化-AOF(Append only File)

aof方式的持久化是通过日志文件的方式。默认情况下redis没有开启aof,可以通过参数appendonly参数开启。
碰到的坑:
我把redis.conf 复制了一份命名为redis_aof.conf后删除,无法启动了。执行redis-server /usr/local/redis/redis.conf 就可以了。下面代码中出现Fatal error, can’t open config file解决办法如代码所示找到绝对路径就可以了。具体什么原理也不清楚,希望有谁了解可以告知一下。按照视频中执行redis-server /usr/local/redis/redis_aof.conf后启动客户端,发现怎么都无法生成appendonly.conf,后来才发现需要执行SHUTDOWN重启后才可以。

[root@wdj redis]# ./redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> 
[root@wdj redis]# redis-server /usr/local/redis/redis.conf 
[root@wangdejian redis]# ./redis-cli 
127.0.0.1:6379> 
[root@wdj bin]# redis-server /redis/redis.conf
52383:C 04 Dec 19:16:20.833 # Fatal error, can't open config file '/redis/redis.conf'
[root@wdj bin]# redis-server /usr/local/redis/redis_aof.conf 
[root@wdj bin]# redis-cli -p 6379
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> SHUTDOWN
not connected> exit
[root@wdj bin]# redis-server /usr/local/redis/redis_aof.conf 
[root@wdj bin]# ./redis-cli
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379>
############################## APPEND ONLY MODE ###############################
# 默认情况appendonly no,该为yes后开启aof
appendonly yes
#和rdb一样,aof也会有一个默认文件appendonly.aof.
appendfilename "appendonly.aof"

redis持久化rdb和aof是可以同时存在的,默认启动会先找appendonly.aof。如果appendonly.aof中内容有错误,./redis-cli无法启动。可用下面命令修复。
[root@wdj redis]# redis-check-aof –fix appendonly.aof 
 ‘, got: ‘*’ 62: Expected prefix ’ 
 AOF analyzed: size=133, ok_up_to=98, diff=35 
 This will shrink the AOF from 133 bytes, with 35 bytes, to 98 bytes 
 Continue? [y/N]: y 
 Successfully truncated AOF