Redis入门:五、持久化RBD和AOF(重点)

一、Redis持久化

1、什么是Redis持久化?

Redis持久化是指将内存中的数据保存的磁盘,进行存储。

2、为什么要Redis持久化?

在实际工作中,Redis数据经常发生改变,容易造成数据丢失,同时,如果Redis服务器发生断电等异常,数据断电即失,同时如果服务器退出,服务器中的数据库状态也会消失。

二、Redsi持久化的两种方式

1、RDB

1.1 RDB的含义

在指定的时间间隔内将内存中的数据集体快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。Redish会单独创建一个子进程来进行持久化。会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的。
在这里插入图片描述
RDB文件的保存格式为.rdb

1.2 RDB模拟实验

1>触发规则:(手动触发和自动触发)
①满足save规则就会触发

#   save ""       #配置文件中有save规则配置
save 900 1        #每900秒有1次变动就触发
save 300 10       #每300秒有10次变动就触发
save 60 10000     #每60秒有10000次变动就触发

②执行flushall命令,但里面是空内容。
③ 退出redis
2>模拟实验:

[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# rm -rf dump.rdb   #删除rdb文件
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# vi redis.conf     #修改save规则

save 900 1
save 300 10
save 60 10000
save 20 2                        #每20秒中有2次变化就触发 
############################启动redis服务器和客户端###############################
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-server redis.conf
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-cli -p 6379
127.0.0.1:6379> keys *                     
(empty list or set)                       #目前redis中无数值

127.0.0.1:6379> set k1 v1                 #设置两个值,并等待20秒
OK
127.0.0.1:6379> set k2 v2
OK
##########################模拟异常退出###############################
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# ps -ef|grep redis
root     14862     1  0 10:28 ?        00:00:00 redis-server 127.0.0.1:6379       
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# kill -9 14862    #强制退出
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# ls           #会发现删除的dump.rdb文件又回来了

########################重新启动服务器###############################
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-server redis.conf
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-cli -p 6379
127.0.0.1:6379> keys *                     # 重启后发现数据没有丢失
1) "k2"
2) "k1"

或者重启服务器时,将rdb文件放在启动目录下,服务器启动时会自动检查dump.rdb文件。

2、AOF

2.1 AOF的含义

AOF(APPEND ONLY FILE):以独立日志的方式记录每次写命令。默认是不开启的,需要手动开启。
在这里插入图片描述

appendonly yes                      #开启AOF功能
appendfilename "appendonly.aof"     #给aof文件命名
###################AOF三种持久化策略#########################
appendfsync always     #同步持久化,每次发生数据变更会被立即记录到磁盘,性能差但数据完整性比较好   
appendfsync everysec   #默认配置,异步持久化,会丢失1秒数据。(优选)
appendfsync no         #将缓存回写的策略交给系统,速度最快,但是不安全。

其它
如果appendonly.aof文件被破坏,系统将无法正常启动,可以使用redis-check-aof --fix进行修复

2.2、实例:
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# vi appendonly.aof #手动修改一下aof,捣蛋一下
this is a modify to test aof   #在文件末尾添加一句话

保存退出,重新启动服务器

[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-server redis.conf
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused #客户端拒绝连接
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
#########################修复##################################
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-check-aof --fix appendonly.aof
0x              51: Expected prefix '*', got: 't'
AOF analyzed: size=111, ok_up_to=81, diff=30
This will shrink the AOF from 111 bytes, with 30 bytes, to 81 bytes
Continue? [y/N]: y
Successfully truncated AOF
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-server redis.conf
[root@iZm5eahcvgu9z4wc5wsl3yZ redis-4.0.10]# redis-cli -p 6379  #正常启动
**127.0.0.1:6379> keys *                              #数据恢复正常
1) "k1"
2) "k2"

三、两者的优势和比较

1、优势

RDB:性能高,效率高。
AOF:数据完整性好

2、缺点

RDB:数据容易丢失,且会占用内存
AOF:效率比较慢。
可以两者结合进行数据恢复,通过RDB数据文件进行快速恢复,再用AOF进行数据完整性恢复。

猜你喜欢

转载自blog.csdn.net/weixin_39085109/article/details/106612938