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 |
---|---|---|
存储大小 | 较小 | 较大 |
存储速度 | 较慢 | 较快 |
恢复速度 | 较快 | 较慢 |
数据安全 | 会丢失 | 根据策略 |
资源消耗 | 高 | 低 |
启动优先级 | 低 | 高 |