redis 持久化
redis 持久化机制
在指定时间间隔内,将内存当中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存,内存当中的数据,如果我们一断电那么数据就会丢
redis提供两种方式进行持久化
-
RDB持久化默认
原理是redis会单独创建(fork)一个与当前进程一摸一样的子进程来进行持久化,这个子进程所有数据(变量 环境变量 程序计数器)都和原进程一摸一样,会先将数据写到一个临时文件中,待持久化结束了在用这个临时文件替换上次持久化的文件,整个过程,主进程不进行任何的io操作,这就确保了极高的性能。
redis启动–>定时任务进行持久化–>持久化文件–>关机–>内存数据丢失
开机–>读取持句话文件–>数据从磁盘回到内存
1.持久化文件在哪里:默认在启动目录下,可以修改配置文件dir参数修改
2.什么时候fork子进程,或者什么时候出发rdb持久化机制:
shotdown时,如果没有开启aof,会出发配置文件的快照配置
执行命令save或者bgsave save是只管保存,其他不管。全部阻塞使用主进程进行持久化,bgsave:redis会在后台异步进行快照操作,同时可以相应客户端的请求。
缺点:如果没有持久化之前宕机数据就会丢失 -
AOF(append only file)持久化
1 持久化文件:和rdb一样跟配配置文件中dir参数来决定
2 开启aof:配置文件中 appendonly参数
3 触发机制根据参数决定:
no:表示等操作几桶进行数据缓存同步到磁盘(效率快,持久化没保证)
always:同步持久化,每次发生数据变更时,立即记录到磁盘(效率低,安全)
everysec:表示每秒同步一次(默认值,很快,但可能会丢一小部分数据)推荐使用
4 aod重写机制
当aof文件增长到一定大小到时候redis能够调用bgrewriteaof对日志文件进行重写,当aof文件大小增长率大于该配置项时自动开启重写(这里指超过原大小当100%)
auto-aof-rewrite-percentage100
当aof文件增长到一定大小的时候redis能够调用bgrewriteaof对日志文件进行重写,当aof文件大小大于该配置项时自动开启重写
auto-aof-rewrite-min-size 64mb