redis持久化存储

一、简介

1、默认情况下redis的所有数据都在内存中进行存取,而将数据异步更新保存到硬盘上的操作就是持久化存储

2、快照:将某时某刻的数据做成一个完整的备份,如mysql的Dump,redis的RDB等

3、日志:任何数据操作都记录日志,要恢复数据,只要按照日志重新执行一遍即可,如mysql的Binlog,redis的AOF等

二、RDB

1、备份:save

①客户端执行save指令,服务端同步创建RDB二进制文件,有可能造成阻塞

②如果已有RDB文件,会替换,即同时最多只有一份RDB文件

2、异步备份:bgsave

①客户端执行bgsave指令,服务端异步创建RDB二进制文件,不会阻塞

②如果已有RDB文件,会替换,即同时最多只有一份RDB文件

3、RDB相关配置

①save 300 10:自动备份配置,若30秒内有至少10条数据更新,自动生成RDB,可以配置多条

②dbfilename "dump.rdb":RDB文件名,默认为dump.rdb

③dir "/opt/soft/redis/data":RDB文件存储目录(跟数据在同一个目录)

④stop-writes-on-bgsave-error yes:如果bgsave出现错误,是否停止写入,默认为yes

⑤rdbcompression yes:RDB文件是否采用压缩格式

⑥rdbchecksum yes:是否对RDB文件进行校验和检验

4、触发生成RDB文件的情景:

①执行save或bgsave

②满足自动备份配置条件

③开启主从复制会自动生成

④关闭redis并备份:shutdown save

⑤debug级别的重启,不会将内存中的数据清空:debug reload

5、RDB的缺点:比较耗时耗性能,不可控,因为备份间隙,可能会丢失数据

三、AOF

1、AOF相关配置

①appendonly yes:是否打开AOF日志记录模式

②appendfilename "bin.aof":AOF文件名

③appendfsync everysec:AOF策略,默认就是everysec

④dir "/opt/soft/redis/data":AOF文件存储目录(跟数据在同一个目录)

⑤no-appendfsync-on-rewrite yes:在AOF重写的时候,是否要做AOF的append操作,因为AOF重写消耗性能与硬盘,此时正常的AOF与重写AOF可能会有硬盘冲突,这段期间的数据,允许丢失

2、AOF策略:日志不是直接写到硬盘上的,而是先放在缓冲区,缓冲区根据一些策略,再写到硬盘上

①always:缓冲区每增加一条日志就刷到硬盘上,不会丢失数据,IO开销大,

②everysec:每秒把缓冲区的日志刷到硬盘上,可能会丢失1秒内的数据

③no:redis:不参照redis的配置,由操作系统决定缓冲区的刷新频率,不可控

3、AOF重写:随着数据操作越来越多,AOF文件会越来越大,可以通过AOF重写来优化

①原理:通过日志的筛除,合并等来实现文件压缩

②执行AOF重写:bgrewriteaof => 服务端会起一个fork进程,完成AOF重写

③auto-aof-rewrite-min-size:触发AOF文件自动重写需要的最小尺寸

④auto-aof-rewrite-percentage:触发AOF文件自动重写需要的文件增长率

⑤查询AOF文件当前尺寸:aof_current_size

⑥查询AOF文件上一次启动或重写的尺寸:aof_base_size

⑦自动触发的条件:aof_current_size > auto-aof-rewrite-min-size 并且 aof_current_size-aof_base_size/aof_base_size > auto-aof-rewrite-percentage => 当前尺寸大于重写需要尺寸,并且增长率大于重写需要增长率

四、RDB与AOF的选择

1、优缺点比较

①启动优先级:AOF先于RDB,redis重启会优先加载AOF

②文件体积:RDB小于AOF

③加载速度:RDB快于AOF

④数据可靠性:RDB可能会丢失备份间隙的数据,AOF受刷新策略影响

posted @ 2020-09-08 16:49  专业搬砖人士  阅读(261)  评论(0)    收藏  举报