redis持久化-爱代码爱编程
Redis为什么需要持久化?
Redis是内存数据库,为防止意外情况(如停电、宕机),重新找回数据
Redis持久化有两种模式:RDB和AOF模式
RDB(Redis DataBase):把当前数据生成快照保存在硬盘上(二进制新式存储),RDB持久化可以手动触发,也可以自动触发。
手动触发:
第一步:启动Redis Server
进入到Redis Server目录,终端输入 redis-server
第二步:输入客户端命令redis-cli
第三步:添加数据
第四步:停掉Redis服务器
第五步:启动Redis服务器
第六步:查看之前的两条数据还在不在?
第七步:重复第三步
第八步:使用savhe或bgsave命令
执行save命令会手动触发RDB持久化,但是save命令会阻塞Redis服务,直到RDB持久化完成。当Redis服务储存大量数据时,会造成较长时间的阻塞,不建议使用
执行bgsave命令也会手动触发RDB持久化,和save命令不同是:Redis服务一般不会阻塞。
文件名是dump.rdp
注意,redis默认是保存在命令所在目录,你很有可能因为权限问题导致保存失败。配置命令目录的权限允许读写即可。
第九步:停止Redis
第十步:启动Redis
第十一步:查询key
自动触发
除了执行以上命令手动触发以外,Redis内部可以自动触发RDB持久化。自动触发的RDB持久化都是采用bgsave的方式,减少Redis进程的阻塞。那么,在什么场景下会自动触发呢?
在配置文件中设置了save的相关配置,如sava m n,它表示在m秒内数据被修改过n次时,自动触发bgsave操作。
当从节点做全量复制时,主节点会自动执行bgsave操作,并且把生成的RDB文件发送给从节点。
执行debug reload命令时,也会自动触发bgsave操作。
执行shutdown命令时,如果没有开启AOF持久化也会自动触发bgsave操作。
RDB优点
RDB文件是一个紧凑的二进制压缩文件,是Redis在某个时间点的全部数据快照。所以使用RDB恢复数据的速度远远比AOF的快,非常适合备份、全量复制、灾难恢复等场景。
RDB缺点
无法做到实时持久化,或者秒级持久化。当Redis 故障时,仍然会有近5 分钟的数据丢失。所以,Redis 还提供了另一种持久化方式,那就是AOF。
AOF(Append Only File):记录每次对数据的操作到硬盘上(操作日志文件)
AOF(Append Only File)持久化是把每次写命令追加写入日志中,当需要恢复数据时重新执行AOF文件中的命令就可以了。AOF解决了数据持久化的实时性,也是目前主流的Redis持久化方式。
AOF持久化流程中的文件重写可以手动触发,也可以自动触发。
手动触发:使用bgrewriteaof命令。
自动触发:
根据配置文件的auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机。
auto-aof-rewrite-min-size:表示运行AOF重写时文件最小体积,默认为64MB,AOF大于64MB就执行重写
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持久化配置:
配置信息在xxx.conf第501~615行
开启成功后,你能看到redis目录下有一个appendonly.aof文件,这个文件是一个文本文件,可以使用记事本等打开