05、Redis持久化

Redis是在内存中操作的,我们服器关闭重启机器后,正常是之前在redis中操作的数据都不存在了,但是实际上我们开机后重新启动redis服务,一样可以看到之前操作的数据。这是为什么呢?

我们在redis的安装目录下可以看到有一个dump.rdb,其实这里面就写有之前的数据。

 这就相当于Redis其实是把数据持久化保存到了磁盘文件中了,具有了持久化的能力。

Redis其会按照设置以快照操作日志的形式把数据持久化到磁盘,根据持久化使用的技术不同,Redis的持久化又分为两种:RDB与AOF

一、持久化原理

 Redis持久化也称为钝化,把内存中数据库的状态描述信息保存到磁盘当中,只不过不同的持久化技术,对数据的状态描述信息是不同的,生成的持久化文件也是不同的。

钝化可以通过手动的方式或者是自动的方式(全自动或者条件触发后自动),把内存中的数据信息写到持久化文件中,当系统重新启动时,自动加载持久化文件,并根据文件中数据库状态描述信息把数据恢复到内存中,这个恢复的过程也称为激活。

从上面看实际上如果用手动的方式或者是定时方式或者条件触发方式进行钝化都有数据丢失的可能。比如,redis中进行了一些操作,但是还没有及时进行钝化操作这个时候redis宕机了。那么上次保存到宕机期间的数据就会丢失。

对于不同的持久化方式,其数据的丢失率也是不一样的。我们定时执行的频率越高则丢失率越小,但频率过高又会影响性能。

 Redis中默认的持久化方式是:RDB,Redis当中也可以让RDB与AOF同时存在,此时系统会使用AOF的方式做持久化。在redis服务启动时,如果它既有RDB的持久化文件又有AOF的持久化文件那么优先加载AOF持久化文件。

二、RDB持久化

 RDB,Redis DataBase,是指的把内存中的某一时刻的数据快照全量写入到指定的rdb文件当中。RDB是默认开启的。当Redis启动时会自己动读取RDB快照文件,把数据从硬盘载入内存,以恢复Redis关机前的数据库状态。

持久化的执行

手动save命令

通过在redis-cli客户端中执行save命令即可立即进行一次持久化保存。

save命令在执行期间会阻塞redis-server进程,直到持久化过程完毕。在redis-server进程阻塞期间,Redis不可以处理任何读写请求,无法对外提供服务。

手动bgsave命令

通过在redis-cli客户端中执行bgsave命令可立即进行一次持久化保存。不同于save命令的是,bgsave命令会使用服务器进程redis-server生成一个子进程,由这个子进程负责完成保存过程,这时子进程进行保存过程中不会阻塞redis-server进程对客户端读写请求的处理。

自动触发条件

它本质上还是bgsave命令的执行,只是这个时候不是主动去执行命令,而是在配置文件中做相应的配置,redis会根据设置信息自动调用bgsave命令执行。

查看最近一次持久化时间

通过命令lastsave命令可以查看最近一次执行持久化的时间,其返回的是一个Unix的时间戳。

RDB优化配置

RDB的相关配置在redis.conf文件的SNAPSHOTTING部分。

save 

上面那个save配置注释掉也是默认的,默认的save命令其实就等价于下面的三条配置

  • save 3600 1 在3600秒内发生1次写操作
  • save 300 100 在300秒内发生100次写操作
  • save 60 10000 在60秒内发生10000次写操作

在上在三个条件中任意条件满足时会执特自动保存bgsave

注意:它是一个条件逐步放宽的递进判断,先看60秒是否执行10000次,如果没有到10000次则等到5分种的时候看是否达到了100次,达到则保存没有达到再看1小时同有没有发生过一次写操作,有则保存否则不保存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值