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