目录
Redis持久化
1.持久化过程
既然redis的数据可以保存在磁盘上,那么这个流程是什么我摘录网上给的五个过程分享给大家
(1) 客户端向服务端发送写操作(这时候数据在客户端的内存中)
(2)数据库服务端接受到写的请求数据(这时候数据在服务端的内存中了)
(3)服务端这时候调用write这个系统调用,将数据往磁盘上面写(这时候数据在系统内存的缓冲区中)
(4)操作系统将缓冲区中的数据转移到磁盘控制器上(这时候数据在磁盘缓存中)
(5)磁盘控制器将数据写在磁盘的物理介质中(这时候数据真正落在磁盘上)
redis如何来实现上面5个保存磁盘的步骤。
提供了两种策略机制,也就是
RDB
和
AOF
。
RDB机制
RDB其实就是把数据以快照的形式保存在磁盘上。什么是快照呢,你可以理解成把当前时刻的数据拍成一张照片保存下来。
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
2种方式:save 和 bgsave
save:同步 执行,阻塞客户端redis命令 知道保存完成
配置:
vim /usr/local/redis-stable/redis.conf
save 秒钟 写操作次数
在这个位置配置
save 30 5,表示 30 秒内写save入 5 条数据就产生一次快照,也就是生成 rdb 文件。

重启服务

根目录产生文件dump.rdb

bgsave:异步执行,需要fork字进程,消耗内存。但是不阻塞客户端redis命令
AOF机制
全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
1、持久化原理
他的原理看下面这张图:
每当有一个写命令过来时,就直接保存在我们的AOF文件中。
2、文件重写原理
AOF的方式也同时带来了另一个问题。持久化文件会变的越来越大。为了压缩aof的持久化文件。redis提供了bgrewriteaof命令。将内存中的数据以命令的方式保存到临时文件中,同时会fork出一条新进程来将文件重写。
重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。
3、AOF也有三种触发机制
(1)每修改同步always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
(2)每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失
(3)不同no:从不同步
开启aof
-
通过修改redis.conf配置中 appendonly yes 来开启AOF持久化

-
通过appendfilename指定日志文件名字(默认为appendonly.aof)

-
通过appendfsync指定日志记录频率

配置好后,停止 Redis 服务,然后再重新开启 Redis 服务后,就可以在 RDB 生成的同目录下(
默认都是启动路径下
)会生成一个 appendonly.aof 文件。

appendonly.aof 这个文件和你启动路径一样的这里(这个文件位置我找了好久才知道的默认都是在Redis启动路径)
比如我是在这里开启redis的
redis-server /etc/redis.conf
