说明:Redis数据是存储在内存中的,Redis服务被关闭,数据是会被清除的。但Redis有数据持久化机制,在默认情况下,停止Redis服务会触发数据持久化机制,将数据保存下来,在下次启动时再读取出来。
Redis中有以下两种数据持久化方式:
RBD
RBD(数据备份文件,Redis Database Backup file),也叫做数据快照,其实就是将所有数据生成为一个快照文件,保存到磁盘中。快照文件为.rdb文件,默认保存在当前运行目录下;
以下四种情况会执行RBD持久化:
-
save命令
-
bgsave命令
-
redis停机时
-
触发RDB条件时
(1)执行save
命令
save命令是主进程执行的,执行该命令会导致其他指令被阻塞;
(在当前目录下生成.rdb快照文件)
(2)执行bgsave
命令
bgsave命令是异步执行的,执行该命令,不会影响到其他进程;
bgsave命令为了保证数据一致性,是在内存里把数据额外拷贝了一份,一份用来生成快照文件,一份用来提供给Redis读写;
(3)redis停机时
ctrl+c
停止redis服务;
(4)触发RDB条件时;
打开redis.conf文件,有关于触发RBD条件的配置;
-
save 3600 1 :表示每3600秒,有1个key发生变化时,触发RDB;
-
save “” :表示不起作用;
另外,还有其他配置:
-
rdbcompression yes:是否开启压缩,建议不开启,开启后会消耗CPU,但磁盘很廉价,没有必要节省;
-
dbfilename dump.rdb:设置RDB文件名称;
-
dir ./:设置RDB文件保存的路径目录;
AOF
AOP(Append Only File),追加文件,是把Redis处理的每一个写命令都记录下来,生成AOF文件;
AOP默认是不开启的,在redis.conf文件中,关于AOP的配置有以下几项:
-
appendonly no/yes :是否开启AOP,默认是no:
-
appendfilename “appendonly.aof”:设置appendfile文件的名称;
-
appendfsync always/everysec/no:AOF记录的频率,分别是每次/每秒/操作系统控制;
-
auto-aof-rewrite-percentage 100:当AOF文件较上次增长超过100%触发AOF;
-
auto-aof-rewrite-min-size 64mb:设置AOF文件体积最小多大以上触发重写;
使用AOF,先把RBD方式关闭掉;
打开这行配置,关闭RBD
打开appendonly
appendonly.aof文件的内容
appendonly.aof是在redis服务开启后生成的,如果没有生成该文件,需要检查redis.conf文件中的配置是否开启;如果开启后重启redis服务还是没有生成aof文件,可以在开启服务后,执行下面的命令;
redis-cli config set appendonly yes
总结
两种持久化方式的特点&区别如下:
两种持久化方式各有优点,可以根据实际需要结合使用;