redis之持久化RDB

redis之持久化RDB

持久化介绍

什么是持久化

  • 将内存中的数据保存至永久性存储介质称为持久化

为什么要持久化?

  • 防止数据的意外丢失,确保数据安全性

持久化过程保存什么

  • RDB:快照形式,保存当前数据状态,存储数据结果,存储格式简单,关注点在数据
  • AOF:日志形式,保存数据的操作过程,存储操作过程,存储格式复杂,关注点在数据的操作过程

在这里插入图片描述

持久化之RDB(数据快照)

	命令 
		save
	作用
		手动执行一次保存操作

了解
在这里插入图片描述
在这里插入图片描述

RDB启动方式-save指令相关配置

在这里插入图片描述

bgsave指令

sava指定工作原理
在这里插入图片描述
Redis是单线程的,所有命令都会在队列中排好队,不建议使用save指令,因为save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成,有可能会造成长时间阻塞,线上环境不建议使用

解决方法

命令
	bgsave
作用
	手动启动后台保存操作,但不是立即执行

 1. 客户端发送bgsave后,redis会选择一个合适的时间执行后台执行,并不是像save一样收到指令立即执行 
    
 2. bgsave命令是针对save阻塞问题做的优化,Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用

bgsave工作原理
在这里插入图片描述
bgsave指令的相关配置
在这里插入图片描述

RDB启动方式-save配置-自动执行

配置
	save second changes
作用
	满足限定时间范围内的key的变化数量达到了指定数量即进行持久化
参数
	second:监控时间范围
	changes: 监控key的变化量
位置 在conf文件中进行配置

在这里插入图片描述
无论get多少次,数据都不会改变,不会进行持久化;由于不进行数据比对,也就意味着对同一个数据连续修改两次,也会进行持久化

RDB三种启动方式对比

在这里插入图片描述

  • save:由单进程执行,是同步的;save和其他的客户端请求都是排队处理的,若执行时间过长会阻塞其他指令;没有fork子进程,无额外内存消耗
  • bgsave:由子进程执行,主进程可以继续处理其他请求,不会阻塞其他指令,是异步的,同时有额外内存开销(子进程)

RDB的特殊启动方式

	全量复制(在主从复制中用到)
	服务器运行过程中重启
		debug reload
	关闭服务器时指定保存数据
		shutdown save	

RDB 的优缺点

RDB优点

  • RDB是一个紧凑压缩的二进制文件,存储效率较高
  • RDB内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
  • RDB恢复数据的速度要比AOF快很多
  • 应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于灾难恢复

RDB缺点

  • save频率低容易丢数据,save频率高会影响请求处理速度
  • bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能
  • Redis的众多版本中未进行RDB文件格式的版本不统一,有可能出现这个版本的redis生成的rbd文件,用其他版本的redis打不开

RDB存储的弊端

  • 存储数据量较大,效率较低——基于快照思想,每次读写都是全部数据,当数据量巨大时,效率非常低
  • 大数据量下的IO性能较低
  • 基于fork创建子进程,内存产生额外消耗
  • 宕机会带来数据丢失
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值