redis持久化之RDB介绍
-
redis持久化介绍
- redis是一个内存数据库,如果没有配置持久化,redis重启后数据就全丢失
- 因此开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据
-
两种持久化方式
- RDB(Redis DataBase)
- AOF(append only file)
-
RDB持久化介绍
- 在指定的时间间隔内将内存中的数据集快照写入磁盘
- 默认的文件名为dump.rdb
-
产生快照的情况
- save
- 会阻塞当前redis服务器,执行save命令期间,redis不能处理其他命令,直到RDB过程完成为止
- bgsave
- fork创建子进程,RDB持久化过程由子进程负责,会在后台异步进行快照操作,快照同时还可以响应客户端请求
- 自动化
- 配置文件来完成,配置触发redis的RDB持久化条件
- 比如“save m n”:表示m秒内数据集存在n次修改时,自动触发bgsave
- 主从架构
- 从服务器同步数据的时候,会发送sync执行同步操作,master主服务器就会执行bgsave
- save
-
优点
- RDB文件紧凑,全量备份,适合用于进行备份和灾难恢复
- 在恢复大数据集时的速度比AOF的恢复速度要快
- 生成的是一个紧凑压缩的二进制文件
-
缺点
- 每次快照是一次全量备份,fork子进程进行后台操作,子进程存在开销
- 在快照持久化期间修改的数据不会被保存,可能丢失数据
-
核心配置
# 任何ip都可以访问 bind 0.0.0.0 # 守护进程 daemonize yes # 密码 requirepass 123456 # 日志文件 logfile "/usr/local/redis/log/redis.log" # 持久化文件名称 dbfilename redis.rdb # 持久化文件存储路径 dir /usr/local/redis/data # 持久化策略,10秒内有1个key改动,执行快照 save 10 1 # 导出rdb数据库文件压缩字符串和对象,默认是yes,会浪费CPU但是节省空间 rdbcompression yes # 导入时是否检查 rdbchecksum yes
-
linux内存分配策略
0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并发错误返回给应用进程 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何 2:表示内核允许分配超过物理内存和交换空间总和的内存 修改方法: echo 1 > /proc/sys/vm/overcommit_memory 持久化配置 vim /etc/sysctl.conf 改为 vm.overcommit_memory=1 修改sysctl.conf后,需要执行sysctl -p 以生效