Redis持久化

Redis为什么需要持久化?

Redis是内存数据库,为防止意外情况(如停电、宕机),重新找回数据

Redis持久化有两种模式:RDB和AOF模式

RDB(Redis DataBase):把当前数据生成快照保存在硬盘上(二进制新式存储),RDB持久化可以手动触发,也可以自动触发。

手动触发:

第一步:启动Redis Server

进入到Redis Server目录,终端输入 redis-server

Redis持久化_第1张图片

第二步:输入客户端命令redis-cli

Redis持久化_第2张图片

第三步:添加数据

Redis持久化_第3张图片

第四步:停掉Redis服务器

第五步:启动Redis服务器

第六步:查看之前的两条数据还在不在?

Redis持久化_第4张图片

第七步:重复第三步

第八步:使用savhe或bgsave命令

执行save命令会手动触发RDB持久化,但是save命令会阻塞Redis服务,直到RDB持久化完成。当Redis服务储存大量数据时,会造成较长时间的阻塞,不建议使用

执行bgsave命令也会手动触发RDB持久化,和save命令不同是:Redis服务一般不会阻塞。

文件名是dump.rdp

注意,redis默认是保存在命令所在目录,你很有可能因为权限问题导致保存失败。配置命令目录的权限允许读写即可。

Redis持久化_第5张图片

第九步:停止Redis

第十步:启动Redis

第十一步:查询key

Redis持久化_第6张图片

自动触发

除了执行以上命令手动触发以外,Redis内部可以自动触发RDB持久化。自动触发的RDB持久化都是采用bgsave的方式,减少Redis进程的阻塞。那么,在什么场景下会自动触发呢?

  1. 在配置文件中设置了save的相关配置,如sava m n,它表示在m秒内数据被修改过n次时,自动触发bgsave操作。

  1. 当从节点做全量复制时,主节点会自动执行bgsave操作,并且把生成的RDB文件发送给从节点。

  1. 执行debug reload命令时,也会自动触发bgsave操作。

  1. 执行shutdown命令时,如果没有开启AOF持久化也会自动触发bgsave操作。

Redis持久化_第7张图片

RDB优点

RDB文件是一个紧凑的二进制压缩文件,是Redis在某个时间点的全部数据快照。所以使用RDB恢复数据的速度远远比AOF的快,非常适合备份、全量复制、灾难恢复等场景。

RDB缺点

无法做到实时持久化,或者秒级持久化。当Redis 故障时,仍然会有近5 分钟的数据丢失。所以,Redis 还提供了另一种持久化方式,那就是AOF。

AOF(Append Only File):记录每次对数据的操作到硬盘上(操作日志文件)

AOF(Append Only File)持久化是把每次写命令追加写入日志中,当需要恢复数据时重新执行AOF文件中的命令就可以了。AOF解决了数据持久化的实时性,也是目前主流的Redis持久化方式。

AOF持久化流程中的文件重写可以手动触发,也可以自动触发。

  1. 手动触发:使用bgrewriteaof命令。

  1. 自动触发:

根据配置文件的auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage参数确定自动触发时机。

  1. auto-aof-rewrite-min-size:表示运行AOF重写时文件最小体积,默认为64MB,AOF大于64MB就执行重写

  1. auto-aof-rewrite-percentage:代表当前AOF文件空间(aof_current_size)和上一次重写后 AOF 文件空间(aof_base_size)的比值: (aof_current_size-aof_base_size) / aof_base_size >= auto-aof-rewritepercentage

注:aof_current_size 和 aof_base_size 可以在 info Persistence 统计信息中查看。

AOF持久化配置:

Redis持久化_第8张图片

配置信息在xxx.conf第501~615行

开启成功后,你能看到redis目录下有一个appendonly.aof文件,这个文件是一个文本文件,可以使用记事本等打开

Redis持久化_第9张图片

你可能感兴趣的:(redis,redis,缓存,数据库)