持久化
RDB方式:
rdb方式的持久化是通过快照完成的。符合一定条件时redis会自动将内存中的所有数据生成一份副本并存储在硬盘上,这个过程叫快照。以下几种情况会对数据进行快照:
1 根据配置规则进行自动快照
2 用户执行save 或 bgsve命令
3 执行 flushall 命令
4 执行复制时
根据配置:save 900 1 ,在900秒内有一个及以上的键被更改则进行快照。
save 或 bgsave :当进行服务重启、手动迁移以及备份时我们要手动执行。
- save : redis同步地进行快照操作,在快照执行过程中会阻塞所有来自客户端的请求。
- bgsave:可以在后台异步地进行快照的操作,执行后会立即返回OK表示开始执行快照操作。如果想知道是否执行完成可以使用lastSave命令获取最近一次成功执行快照的时间。异步看下面原理。
flushAll 命令:redis会清除数据库中所有数据,不管触发快照与否,只要自动快照条件不为空,就会执行一次。
执行复制时:当设置了主从模式时,redis会在复制初始化时进行自动快中啊。
快照原理
使用fork函数复制一份当前进程的副本(子进程)
父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘。
写完所有数据,会该临时文件替代旧的RDB文件。
PS :redis重启后会读取 RDB 快照文件,将数据载入内存。
AOF方式:
使用redis存储非临时数据时
开启:默认没有开启,开启后每执行一条会更改数据,会写入硬盘的AOF文件。
AOF实现:达到一定条件,redis会重写AOF文件,节省空间,保留最后的数据。
同步硬盘数据:由于操作系统的缓存机制,数据并没有真正地写入硬盘,而是进入硬盘的缓存。默认情况下,系统30秒会执行一次同步。在这三十秒可能会导致数据丢失,通过参数 appendfsync设置可以每秒执行一次同步操作。
redis允许 同时开启 AOF 和 RDB , AOF 方式的持久化可能丢失的数据更少。
主从复制
集群
哨兵
原文地址:https://www.cnblogs.com/RobertLionLin/p/11415862.html