RDB持久化与AOF持久化简单描述
RDB:RDB使用快照的方式存储数据库中的内容,直接将所有键值对数据全部存入二进制文件。建议使用BGSAVE来进行备份,整个过程会新fork一个子进程来执行,不影响redis其他进程的IO。
AOF:AOF持久化则是记录每次数据写入的操作命令。并且会维护一个AOF缓冲区和一个重写缓冲区,AOF缓冲区中记录写命令并定期保存到已有的持久化文件中。为了避免文件过大,会根据触发条件进行重写AOF文件,并且为了保证子进程重写过程不丢失实时数据,同时会维护一个重写缓冲区。每次写命令都会同时记录在两个缓冲区中。
两者的选择和优劣对比可以参考:https://www.cnblogs.com/ysocean/p/9114268.html
AOF触发机制
1.没有BGSAVE命令(RDB持久化)/AOF持久化在执行;
2.没有BGREWRITEAOF在进行;
3.当前AOF文件大小要大于server.aof_rewrite_min_size(默认为1MB),或者在redis.conf配置了auto-aof-rewrite-min-size大小;
4.当前AOF文件大小和最后一次重写后的大小之间的比率等于或者等于指定的增长百分比(在配置文件设置了auto-aof-rewrite-percentage参数,不设置默认为100%)
设置redis.conf
在redis服务器所在的容器中中配置redis.conf
- appendonly。默认是appendonly no。改成appendonly yes。设置AOF模式持久化(记录每次操作,不使用快照,也就是RDB的形式)
- appendfsync。设置成everysec(每秒进行一次相对于always性能更好)。
- dbfilename。 设置保存的文件名称(可选)
- dir。 设置本地数据存储位置(可选,我配置到/redis/data,便于做与宿主机文件夹的映射)
配置完以后重启redis服务
docker 启动配置
- 设置端口映射6378:6378
- 设置文件挂载/redis/data:/redis/data