Linux下redis的持久化RDB和AOF

redis的持久化

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

RDB和aof持久化的区别 :

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

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

RDB持久化 :

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

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

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

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


rdb配置参数:

dir /data/6379/
dbfilename  dbmp.rdb

每过900秒 有1个操作就进行持久化

save 900秒  1个修改类的操作
save 300秒  10个操作
save 60秒  10000个操作

save  900 1
save 300 10
save 60  10000

 


 

RDB持久化流程

1. RDB持久化redis服务端配置 :

daemonize yes    # 后台运行redis-server
port 6379
logfile /data/6379/redis.log
dir /data/6379              #定义持久化文件存储位置
dbfilename  dbmp.rdb        #rdb持久化文件
bind 10.0.0.10  127.0.0.1    #redis绑定地址
requirepass redhat            #redis登录密码
save 900 1                    #rdb机制 每900秒 有1个修改记录
save 300 10                    #每300秒        10个修改记录
save 60  10000                #每60秒内        10000修改记录

2. 启动redis服务端

3. 登录redis设置一个key :

redis-cli -a redhat
---------------------------------------
# -a 参数表示auth验证密码

4. 检查目录/data/6379地下有没有dbmp.rdb文件

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

127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> save
OK

 


 

AOF持久化

AOF(append-only log file) :

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

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

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

    缺点: 日志记录非常大

AOF配置参数 :

AOF持久化配置,两条参数

appendonly yes
appendfsync  always    总是修改类的操作
             everysec   每秒做一次持久化
             no     依赖于系统自带的缓存大小机制

在redis.conf内配置 :

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename  dbmp.rdb
requirepass redhat
save 900 1
save 300 10
save 60  10000
appendonly yes
appendfsync everysec

启动redis服务 :

redis-server redis.conf
------------------------------------------------
# 想要redis.conf内的配置全部生效, 需要在启动redis-server是加上redis.conf参数

检查redis数据目录/data/6379/是否产生了aof文件 :

[root@web02 6379]# ls
appendonly.aof  dbmp.rdb  redis.log

登录redis-cli, 写入数据, 实时检查aof文件信息 :

[root@web02 6379]# tail -f appendonly.aof

设置新key, 检查aof信息, 然后关闭redis, 检查数据是否持久化 :

redis-cli -a redhat shutdown

redis-server /etc/redis.conf

redis-cli -a redhat

 


 

redis不重启, 切换RDB备份到AOF备份

此操作是基于redis2.2版本以上, 通过config set命令, 达到不重启redis服务, 从RDB持久话切换到AOF

检查redis版本 :

redis-sserver -v

实验环境准备 :

  redis.conf服务端配置文件

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename  dbmp.rdb
save 900 1                    #rdb机制 每900秒 有1个修改记录
save 300 10                    #每300秒        10个修改记录
save 60  10000                #每60秒内        10000修改记录

启动redis服务端 :

redis-server redis.conf

登录redis-cli插入数据, 手动持久化 :

127.0.0.1:6379> set name xd
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set addr hd
OK
127.0.0.1:6379> save
OK

检查RDB文件 :

ls /data/6379

备份这个rdb文件, 保证数据安全 :

cp dbmp.rdb /tmp/

执行命令, 开启AOF持久化 :

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

确保数据库的key数量正确 :

127.0.0.1:6379> keys *
1) "addr"
2) "age"
3) "name"

插入新的key, AOF文件会记录 :

127.0.0.1:6379> set title golang
OK

此时RDB已经正确切换到AOF, 注意还的修改redis.conf添加AOF设置, 不然重启后, 通过config set设置的配置将丢失

posted @ 2018-12-08 19:02  唯你如我心  阅读(2175)  评论(0编辑  收藏  举报