redis学习—redis数据持久化RDB和AOF

一、redis持久化rdb和aof

redis持久化

Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。

1.redis持久化RDB

redis提供了RDB持久化的功能,这个功能可以将redis在内存中的状态保存到硬盘中,它可以手动执行。

也可以在redis.conf中配置,定期执行。

RDB持久化生产的RDB文件是一个经过压缩的二进制文件,这个文件保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。

RDB过程

内存数据保存到磁盘。 在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot) 优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现 rdb通过再redis中使用save命令触发 rdb。

redis持久化RDB实战

1.准备配置文件

我们的redis安装在/opt/redis-4.0.10/下,这里我们新建一个conf文件夹,用于存储我们的接下来要测试的给中配置文件。

cd /opt/redis-4.0.10/conf
​
vim rdb.conf  # 编辑配置文件
# 绑定ip,如需要远程访问,需要填写服务器ip
bind 127.0.0.1# 端口,redis启动端口
port 6379# 以守护进程方式在后台运行
daemonize yes
​
# 日志文件
logfile /var/redis/rdb-log/redis.log
​
# rdb持久化数据文件
dbfilename dump.rdb
​
# 持久化数据文件存放路径,注意文件夹是否存在
dir /var/redis/rdb-log
​
save 900 1  # 在900秒内,如果有一个操作,就会执行持久化,也就是save
save 300 10  # 在秒300内,如果有10个操作,就会执行持久化,也就是save
save 60 10000  # 在60秒内,如果有一个操作,就会执行持久化,也就是save

注意配置文件中的日志和持久化文件保存路径,我们需要手动建立。

mkdir /var/redis/rdb-log  # 用于存储rdb配置文件生成的数据文件

2.根据配置文件启动服务端

redis-server /opt/redis-4.0.10/conf/rdb.conf

3.登录redis,并设置键值对

redis-cli  # 登录redis
​
set name ryxiong  # 设置一个键值对

4.去/var/redis/rdb-log下查看有没有dbmp.rdb文件

5.通过save触发持久化,将数据写入RDB文件中

127.0.0.1:6379> save
OK

6.测试是否生效,退出redis,杀死进程

pkill -9 redis # 杀死redis进程
ps -ef | grep redis  # 检查是否杀死
​
redis-server /opt/redis-4.0.10/conf/rdb.conf  # 重启
redis-cli  # 重新连接数据库
keys *  # 查看
# 查看我们发现之前写的name ryxiong键值对在里面,成功

2.redis持久化AOF

AOF(append-only log file)记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集

AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。

  • 优点:最大程序保证数据不丢

  • 缺点:日志记录非常大

redis-client   写入数据  >  redis-server   同步命令   >  AOF文件

配置参数详解:

AOF持久化配置,两条参数

appendonly yes appendfsync

  • always:总是修改类的操作

  • everysec:每秒做一次持久化

  • no:依赖于系统自带的缓存大小机制

aof持久化实例

1.准备aof配置文件

redis-client   写入数据  >  redis-server   同步命令   >  AOF文件

同样去创建配置文件中写入的日志存储路径

mkdir /var/redis/aof-log  # 用于存储aof的持久化数据和日志

2.启动redis服务,指定aof的配置文件

redis-server /opt/redis-4.0.10/conf/aof.conf

3.检查/var/redis/aof-log中是否有aof文件

ls /var/redis/aof-log

4.登录redis,写入数据,实时检查aof文件信息

redis-cli  # 登录redis
​
set name ryxiong  # 写入数据

检查是否有持久化数据

tail -f appendonly.aof

6.关闭redis,重启登录,检查数据是否持久化

redis-cli shutdown  # 关闭redis
​
redis-server /opt/redis-4.0.10/conf/aof.conf  # 重启redis
​
redis-cli  # 登录redis
​
keys *  # 查看数据

redis持久化的面试题:

redis 持久化方式有哪些?有什么区别?

  • rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能

  • aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog

二、redis持久化模式切换

这里我们要实现的是在不重启redis的情况下, 切换RDB备份到AOF备份中,

注意确保redis版本在2.2以上

redis-server -v
Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=64cb6afcf41664c

1.配置文件准备

rdb.conf配置文件

# 绑定ip,如需要远程访问,需要填写服务器ip
bind 127.0.0.1# 端口,redis启动端口
port 6379# 以守护进程方式在后台运行
daemonize yes
​
# 日志文件
logfile /var/redis/rdb-log/redis.log
​
# rdb持久化数据文件
dbfilename dump.rdb
​
# 持久化数据文件存放路径,注意文件夹是否存在
dir /var/redis/rdb-log
​
save 900 1  # 在900秒内,如果有一个操作,就会执行持久化,也就是save
save 300 10  # 在秒300内,如果有10个操作,就会执行持久化,也就是save
save 60 10000  # 在60秒内,如果有一个操作,就会执行持久化,也就是save

注意:看有没有/var/redis/rdb-log文件夹,有的话,清空里面的内容

2.启动redis服务器

redis-server /opt/redis-4.0.10/conf/rdb.conf

3.登录redis插入数据,手动持久化

redis-cli 
127.0.0.1:6379> set name ryxiong
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set addr shenzhen
OK
127.0.0.1:6379> save
OK

检查RDB文件

ls /var/redis/rdb-log

发现有dump.rdb文件。

4.执行命令,临时切换aof持久化

127.0.0.1:6379> CONFIG set appendonly yes  # 开启AOF功能
OK
127.0.0.1:6379> CONFIG SET save ""  # 关闭RDB功能
OK

5.插入新的key,检查/var/redis/rdb-log中是否生成了aof文件

127.0.0.1:6379> set hobby music
OK

退出查看aof

ls /var/redis/rdb-log  # 成功了的话会生成aof的文件

注意

通过这种方式切换aof只是临时切换,配置文件还是之前rdb的配置文件,这时候我们需要再去修改rdb.conf文件,才能使配置文件永久生效。

 

posted @ 2019-07-04 22:50  ryxiong728  阅读(188)  评论(0编辑  收藏  举报