介绍:
redis之所以性能极高,不但归根于它的代码风格极其精简,整个源码只有23000行(主要原因),读写都是在内存中也是 其中一个很重要的因素,但内存数据会随着计算机关闭而丢失,为了保证数据不丢失,采取持久化
措施,简单点来说就是:把内存中的数据存放到磁盘中,再次启动计算机读取数据到内存的一个过程。
redis持久化措施主要有两种(两种也可以同时使用,但是会减耗性能,所以一般只选用其中一种,如果redis只做缓存的话,也没啥必要设置这个,禁用持久化可以提高redis的执行效率
):
①快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘;
②文件追加方式(AOF, Append Only File),记录所有的操作命令,并以文本的形式追加到文件中;
一、快照方式(RDB, Redis DataBase)
1.触发方式:
①手动触发:进入到redis-cli中输入命令save和bgsave。
save
:单线程操作,执行后会导致redis主线程阻塞
,在生成完快照文件(dump.rdb)之前,无法响应用户请求。
bgsave
:异步操作,执行后,会创建一个子进程fork(),不影响用户请求redis服务端。
②自动触发(配置文件设置,参数较多就不发出来了)
修改 redis.conf
配置文件,每隔多少事件就保存一次,这有个致命的缺点,redis如果挂了,可能会丢失一段时间的数据。
2.文件恢复:
redis启动时,redis会先找到dump.rdb文件,自动加载(Redis 服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止。)
二、文件追加方式(AOF, Append Only File)
1.Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
2.触发方式:修改 redis.conf
配置文件,开启后每秒执行,或者每次操作执行,又或者不同步。
appendonly yes //redis 默认关闭,开启需要手动把no改为yes
appendfilename "appendonly.aof" //指定本地数据库文件名,默认值为 appendonly.aof
appendfsync always //同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全)
# appendfsync everysec //出厂默认推荐,每秒异步记录一次(默认值)
# appendfsync no //不同步,一般不用
3.文件恢复:
redis启动时,redis会找到appendonly.aof ,进行数据恢复,但可能没保存完就关闭了redis,使到文件异常,需通过命令修复文件。
redis-check-aof --fix
三、两者区别
RDB | AOF | |
---|---|---|
触发方式 | 手动触发,自动触发 | 自动触发 |
持久化数据特点 | 每隔一段时间触发一次,可能会丢失数据 | 每一次操作,或者每一秒,或者不同步。 |
文件恢复 | 找到dump.rdb,启动时恢复,速度比aof快速(二进制文件,紧凑,适用于备份和灾难恢复),但回复期间会阻塞主线程。 | 找到appendonly.aof,启动时恢复, |