redis持久化RDB与AOF

Redis持久化

参考链接

1.redis中文官网

2.大神博客

中文官网的话
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
AOF持久化方式 :

  • 1.记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,
  • AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
  • 你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.
    最重要的事情是了解RDB和AOF持久化方式的不同,让我们以RDB持久化方式开始:

那我们选择哪种持久化方式
1.一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能。

2.如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。

3.有很多用户都只使用 AOF 持久化, 但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快

redis 配置文件(安装redis默认)

# 绑定的ip地址 
bind 127.0.0.1 ::1
# 外部网络连接访问redis
protected-mode yes
# redis服务启动在哪个端口
port 6379

tcp-backlog 511
# 设置客户端连接时的超时时间,单位为秒。0是关闭
timeout 0
tcp-keepalive 300
# 后台运行
daemonize yes
supervised no
# redis服务的进程id
pidfile /var/run/redis/redis-server.pid
# 日志等级
# 定义日志级别。默认值为notice,有如下4种取值:
#         debug(记录大量日志信息,适用于开发、测试阶段)
#         verbose(较多日志信息)
#          notice(适量日志信息,使用于生产环境)
#         warning(仅有部分重要、关键信息才会被记录)
loglevel notice
# redis 日志存放位置
logfile /var/log/redis/redis-server.log
# redis db的数量默认为16 可改变redis db的数量
databases 16
always-show-logo yes
# 快照配置
save 900 1
save 300 10
save 60 10000
# RDB 文件的名字
dbfilename dump.rdb
# 当前工作目录
dir /var/lib/redis
# AOF持久化
appendonly no
# AOF持久化文件名
appendfilename "appendonly.aof"
# 每秒记录一次
appendfsync everysec

RDB

rdb方式持久化的的数据保存在 dump.rdb 文件当中, 当然dump.rdb 名字是可以在配置文件中修改的

在 redis.conf 中添加以下配置打开RDB持久化方式
# Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集
save 60 1000
# 900 秒有操作了一次key
save 900 1
# 300 秒10次 key
save 300 10

这种持久化方式被称为快照

RDB 的工作方式
当redis需要保存 dump.rdb时,也就是触发了上面60秒修改1000个key,服务器会这么做
  • redis 调用forks ,同时有子父进程
  • 子进程现将当前数据集写到一个临时的RDB文件中 列如dump_temp.rdb
  • 当子进程完成dump_temp的写入时,并且中间没有任何异常 dump_temp 将会替换 原来旧的dump.rdb ,旧的dump.rdb 将会被删除

AOF

快照的方式并不耐久,如果宕机了 以上面60秒内1000次key的改动,如果没到1000没有持久化那么可能会造成数据集的丢失

在redis中添加以下配置打开AOF持久化
appendonly yes
从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。
appendfsync always 总是记录
appendfsync everysec 每秒一次持久化  ----- **推荐配置

aof会记录redis中写的操作

可能会遇到的问题
  • aof文件过大,比如 一个计数器incr 100次则aof 会追加100次,但是其实set一次就够了
    但是 redis2.4 后redis会在不打断客户端的情况下 rebuild aof文件(会重建) 将100条 incr 合并成一条set
  • 当 aof 文件损坏了怎么办
    假如当你的aof文件正在写的时候,宕机了,那么redis在重启的时候会拒绝载入这个aof文件
    可以这样解决
    1.使用 redis-check-aof --fiex aoffile 进行修复
    2.重启redis服务器,等待服务器载入修复后的 AOF 文件,并进行数据恢复
工作原理

与RDB类型

RDB 与 AOF 两种持久化方式可以都用(并存)

不重启redis怎样从RDB方式切换到AOF方式

  • 为最新的 dump.rdb 文件创建一个备份。将备份放到一个安全的地方。
  • 执行以下两条命令:
  • 开启AOF持久化方式
  • redis-cli config set appendonly yes
  • 关闭RDB方式
  • redis-cli config set save “”
  • 这个时候写入的时候就会记录进AOF文件中了
    执行的第一条命令开启了 AOF 功能: Redis 会阻塞直到初始 AOF 文件创建完成为止, 之后 Redis 会继续处理命令请求, 并开始将写入命令追加到 AOF 文件末尾。
    执行的第二条命令用于关闭 RDB 功能。 这一步是可选的, 如果你愿意的话, 也可以同时使用 RDB 和 AOF 这两种持久化功能。
  • 这个时候算是切换完成了,重要:---------- 在redis.conf 中把AOF的配置加上,不然重启的时候还是会读取dump.rdb的数据 因为config set 是临时的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值