栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis持久化

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis持久化

Redis持久化

为什么redis需要持久化

Redis对数据的操作时基于内存的,服务器宕机等意外情况,如果没有持久化机制,那么redis中的数据就会丢失无法恢复。有了持久化机制,redis在下次重启的时候可以利用之前的持久化文件进行数据恢复,

  • RDB:把当前数据生成快照保存在硬盘中
  • AOF:记录每次对数据的操作到硬盘中

RDB持久化

RDB(Redis DataBase)持久化把当前redis中全部数据生成快照保存在硬盘中,RDB持久化可以手动开启,也可以自动触发。

save和bgsave命令可以触发RDB持久化操作。

save命令

执行save命令会手动触发RDB持久化,但是save命令会阻塞Redis服务,直到RDB持久化完成,当Redis服务储存大量数据时,会造成较长时间的阻塞,不建议使用

127.0.0.1:6379> save
OK

bgsave命令

执行bgsave命令也会手动触发RDB持久化,和save命令不同的是:Redis服务一般不会阻塞,Redis进程会执行fork操作创建子进程,RDB持久化由子进程负责,不会阻塞Redis服务进程,Redis服务的阻塞只发生在fork,

127.0.0.1:6379> bgsave
Background saving started

1,执行bgsave命令,Redis进程先判断当前是否正在执行RDB或者AOF持久化,如果存在就是直接结束,

2,Redis进程执行fork操作创建子进程,在fork操作的过程中Redis进程会被阻塞。

3,Redis进程fork完成后,bgsave命令就会结束,自此Redis进程不会被阻塞,可以进行其他命令。

4,子进程根据Redis进程的内存生成快照文件,并替换掉原来的RDB文件。

5,子进程通过信号量通知Redis进程已完成。

RDB优点

RDB文件一个紧凑的二进程压缩文件,是Redis在某个时间点的全部数据快照,所以使用RDB恢复数据的速度比AOF的快。适合备份,全量复制,灾难恢复等场景。

RDB缺点

每次进行bgsave操作都要执行fork操作创建出子进程,属于重量级操作,频繁执行成本过高,所以无法做到实时持久化。

由于Redis版本的不断迭代,存在不同格式的RDB版本,有可能出现低版本的RDB格式无法兼容高版本的RDB文件的问题。

AOF持久化

AOF(Append Only File)持久化,是把每次写命令追加写入日志中,当需要恢复数据时重新执行AOF文件中的命令就可以了,AOF解决了数据持久化的实时性,最常见主流的Redis持久化操作。

文件同步策略

AOF持久化流程中的文件同步有以下策略:
  1. always:每次写入缓存区都要同步到AOF文件中,磁盘的操作比较慢,限制了Redis高并发,不建议配置
  2. no:每次写入缓冲区后不进行同步,同步到AOF文件的操作是由操作系统负责的,每次同步AOF文件的周期不可控,而且增大每次同步的磁盘的数据量。
  3. eversec:每次写入缓冲区后,由专门的线程每秒同步一次,做到兼顾性能和数据安全,建议的同步策略,也是默认的策略。

触发文件重写

AOF持久化流程中的文件重写可以手动触发,也可以自动触发。

  • 手动触发:使用bgrewriteaof命令

    127.0.0.1:6379> bgrewriteaof
    Background append only file rewriting started

  • 手动触发:根据auto-aof-rewrite-min-size 和auto-aof-rewrite-percentage配置确定自动触发的时机,auto-aof-rewrite-min-size 表示运行AOF重写时文件大小的最小值,默认为64MB,auto-aof-rewrite-percentage表示当前AOF文件大小和上一次重写后AOF文件大小的比值的最小值,默认100,只有前两者同时超时才会触发。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/922263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号