redis持久化以及原理-创新互联
在启动的时候 要制定配置文件
配置文件中 指定了rdb文件的名字,默认情况下
redis在哪里运行,那么他的rdb文件就会保存在哪里
而且每次退出redis的时候,都会执行一次 save 不是bgsave,因为都要退出redis,就代表要停止服务了,不玩了,不想接受新的请求了,所以使用阻塞的save比较合适。
而生成的文件名就是 这里的 dump.rdb
当然在每次启动redis的时候,也会去读取这个rdb文件进行数据的恢复。
如果在关闭reids后修改了这里的文件名,那么再次启动的时候,自然是做不了数据的回复的
这里的 5 1 就是 5秒内 只要有 1 次的key的修改 那么就执行一次 bgsave操作 (这里是 bgsave,是异步的)
压缩是要占用 cpu资源的 所以视情况看是否开启压缩
- 首先开启一个子进程 然后把页表复制一份给子进程 (页表是linux的虚拟内存和物理内存映射表 在linux中无法直接操作物理内存,页表就记录了虚拟内存和物理内存之间的映射关系)
- 子进程就开始对内存中的数据进行备份,并且会把这块内存设置为 只读状态,这是为了,即便在子进程备份的时候,主进程在写操作,就会造成脏数据的情况 如果设置成了只读状态,就可以避免这一情况的发生,但是如果这个时候真的来了一个写操作,那么主进程会把这个要修改的数据复制一份出来,对这个复制的数据进行修改,保证子进程的备份不会受到影响。
- 极端情况下,如果所有要备份的数据都被主进程重新写了一次,那么也就是说,redis的内存占用直接翻了一倍,原本16g,直接到了32g,那么怎么办?虽然这种情况非常的极端,几乎不可能发生,但是理论上存在,所以我们在使用redis的时候,一般不会把内存全部交给redis来使用,要留有一定的内存
如果,就如上文所说 300秒内有 100次 的 key 修改就执行 一次 rdb操作,那么会发生这种情况 如果在 300 秒内出现问题,突然的宕机,那么怎么办
AOF(append only file) 追加文件只记录 写命令 可以看作是 命令日志文件
默认是不开启的 在配置文件中 开启即可 。当然也可以配置这个aof文件的文件名
always就是 一次操作中 内存和磁盘都要 写 才能算完成一次操作。
everysec就是每秒钟
但是这样还是有问题
因为 aof 记录set等操作 如果 set num 123 然后又 set num 234
那么其实 第一次的set是没有意义的 ,但是依旧被记录了下来
占用空间,还浪费时间
所以有一个 bgrewriteaof 命令 进行重写aof文件 ,来解决上述问题
当然,我们可以配置 aof 重写的频率策略
开启aof 只需要修改配置文件 从 no 改成 yes即可
其他的 每秒刷盘 以及 重写策略 都保持默认即可
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文标题:redis持久化以及原理-创新互联
文章起源:http://ybzwz.com/article/ideph.html