redis持久化的两种方式RDB与AOF

如何实现Redis数据持久化(redis默认开启RDB模型)

如果我们redis服务器宕机了,就会导致原来访问redis的请求全部到了mysql数据库,这个时候mysql数据库离崩溃就不远了

确保我们重启redis服务器还能将绝大部分的数据恢复进内存,怎么办?
是不是就要把内存数据保存到硬盘中便于恢复

RDB模型:
就是每隔一段时间,定时保存,有点像mysql中进程用到的mysqldump

优势:
每隔一段时间,全量备份
灾备简单,dump.rdb文件拷走就完了
在RDB备份的时候会fork一个进程来操作,就不影响提供读写进程的效率了
劣势:
当备份后和故障间这段时间的数据无法保存
新fork的子进程会从父进程copy全部的内存数据(这个时候会瞬间膨胀两倍)会造成cpu和内存负担
由于是定时备份,所以时效差

配置:

192.168.227.135:6379> config get dir #获取配置文件位置
1) "dir"
2) "/usr/local/redis-6379"

vi config.conf

# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1 # 在900秒内有1个key更新触发一次
save 300 10 # 在300秒内有10个key更新触发一次
save 60 10000 # 有60秒内有10000个key更新触发一次
# 那这个rdb文件放在哪呢?
dir /usr/local/redis-6379 #可以通过 config get dir
dbfilename dump.rdb #rdb的文件名
# yes 如果save过程 中出错,则停止redis服务的写操作
stop-writes-on-bgsave-error yes

注意:执行的备份命令是bgsave / 如果是使用save会阻塞redis的主进程

AOF模型 有点类似于mysql的binlog,它是把我们所有redis的写操作命令记录下来了

AOF特点:

以日志的形式来记录用于的写操作
文件是心追加的方式而不是修改的方式
redis的AOF的恢复 其实是把文件从头到尾执行一遍

优势:
每秒数据的记录和操作
当文件比较大的时候会触发AOF文件重写机制进行文件压缩,把重复操作一个key,保留最后一次操作

劣势:
同样的数据,AOF比RDB大得多
aof同步的时候比RDB慢得多
AOF复写的时候也会fork一个进程来操作

开启AOF模式:

#AOF默认是关闭的,需要手工启动
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
#这就是AOF的持久化频率
# everysec:每秒操作都备份,推荐使用
# always: 每次操作都备份
appendfsync everysec
#触发重写的两个条件,当下面两条件同时满足才会触发重写
# 当现有AOF文件比上次大了100%,就触发重写
auto-aof-rewrite-percentage 100
# 当现有文件大于64mb的时候,触发重写
auto-aof-rewrite-min-size 64mb 
# 变成100mb,要等到200mb才会触发重写

重启redis不要使用kill进程的方法,这样会导致redis当前数据无法写入aof或rdb,使用客户端的shutdown

持久化文件是如何恢复的?
RDB文件只需要放在dir目录下我们的redis会在重启后自动加载
AOF文件也是只需要放在dir目录下我们的reids会在重启后自动加载
AOF与RDB不进行通信的

AOF启用后,Redis优先选择AOF

如果线上没有开启AOF,这个时候需要开启,不需要进行配置,修改后重启来生成AOF文件
使用内部命令先开启config set appendonly yes

Redis内存管理之缓存过期机制:
主动删除:
默认1秒检查10定义了expire的key.如果过期就删除
可以设置redis.conf hz 10

惰性删除:
如果你在访问的时候reids发现这个key过期,就会返回nil并删除

如果超时时间设置比较久 或者不设置超时的key比较多,redis内存满了怎么办?
redis内存缓存的管理机制
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值