进阶篇:二、持久化

发布于:2022-10-12 ⋅ 阅读:(478) ⋅ 点赞:(0)

Redis作为一款高速NoSQL型数据库,操作数据时是在内存中,如果断电数据将丢失。

持久化就是将数据永久的保存在磁盘(是存储介质就行)上,下次使用可以恢复,防止数据丢失。

对Redis来说,持久化分为两种:

  • RDB形式:保存数据
  • AOF形式:保存操作语句

1、RDB形式持久化

RDB:就是快照形式去保存数据,它会将所有数据保存下来。相当于给数据拍张照片。

save指令

当我们想要取将数据持久化时,我们可以调用save指令:

save			#将数据持久化(保存)到配置文件设置的路径下,生成.rdb文件。

在这里插入图片描述

如果报错,有可能是启动redis-server时没有root权限,改用sudo命令启动可避免此问题。

bgsave指令

bgsave指令和save一样,也是用来进行手动持久化的命令。它与save的区别在于bgsave是Redis调用一个子进程完成持久化,不会耽误其他命令的执行。

bgsave

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

RDB相关配置

再启动服务器时,可以通过配置文件对RDB形式的持久化进行配置。

在这里插入图片描述

以上两种命令都是手动进行持久化,但在实际生产过程中,持久化应该是自动执行的。因此在配置文件中配置

save [second] [changes]		#在配置文件中配置自动持久化,满足条件出发持久化
save 600 1000    #代表在600s内,数据改变了1000次执行持久化。
				 #要注意是数据改变才算,像get这种指令,没改变数据你get10000次也不触发持久化。但是select切换数据库算一次改变。

2、AOF形式持久化

AOF是通过记录操作来进行持久化的,如果将数据类比为房子,RDB形式的持久化就相当于再建造一个备用的房子放在仓库。AOF形式的持久化就相当于把房子建造的每一个步骤记录下来(相当于施工计划)放在仓库,想要恢复按照记录再实施就行,

目前Redis持久化的主流方式就是AOF形式。

基本操作

如下图所示,AOF机制实现持久化时客户端会先将写操作记录再缓存中,然后会(根据配置)刷新到.aof文件中。

在这里插入图片描述

那么如何开启AOF持久化这个功能呢?我们需要再启动服务端的时候再配置文件中设置开启:

#这是要在配置文件添加的属性!!!
appendonly  yes | no				#默认为no不开启。
appendfsync		always | everysec | no	#AOF写数据策略,简单来说就是我什么时候该把缓存里的数据写进.aof文										件

在这里插入图片描述

AOF重写概念及其配置

AOF重写:简而言之就是压缩语句,去除无效语句。

要明白.aof文件要存放从开始以来的所有写操作,随着数据量的越来越多,.aof文件体积也会越来越大(就像你建房子,建的越大,备份的施工步骤也会越来越多)。重写就是将那些无效的写操作不进行记录(像你先set一个数据,过了一会又把它del了,那么这就是无效。你把A改成B,一会又把B改成A,这也是无效),重写就是去除无效数据或者将无效过程压缩为一两句有效的操作。

在这里插入图片描述

执行重写

1、通过命令手动执行:

bgrewriteaof				#手动重写指令

2、通过配置文件设置自动重写参数:

在这里插入图片描述

重写的原理

注意AOF写数据策略为always时没法重写,因为每执行一个写操作都会立马进行持久化!!!

下面针对AOF写数据策略为everysec时的重写原理:

在这里插入图片描述

3、RDB和AOF的区别

方面 RDB AOF
存储大小 较小 较大
存储速度 较慢 较快
恢复速度 较快 较慢
数据安全 会丢失 根据策略
资源消耗
启动优先级

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到