redis学习—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文件,才能使配置文件永久生效。