资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Redis5.0+——持久化——RDB&AOF-创新互联

Redis持久化-RDB 1.实现目标:

在redis持久化时,持久化dump.rdb文件放入到redis解压目录下的data目录下的6379目录下

创新互联是一家以网络技术公司,为中小企业提供网站维护、成都网站建设、成都做网站、网站备案、服务器租用、域名注册、软件开发、微信小程序开发等企业互联网相关业务,是一家有着丰富的互联网运营推广经验的科技公司,有着多年的网站建站经验,致力于帮助中小企业在互联网让打出自已的品牌和口碑,让企业在互联网上打开一个面向全国乃至全球的业务窗口:建站沟通电话:189820811082.前期准备

1.在redis-5.0.3解压目录下新建data数据目录 2.编辑前面配置的/etc/redis.conf配置文件

修改持久化文件位置
(1) 进入安装redis的目录,新建data文件夹以及端口对应文件夹
[root@VM-16-10-centos redis-5.0.3]# cd /usr/local/redis-5.0.3
[root@VM-16-10-centos redis-5.0.3]# mkdir data
[root@VM-16-10-centos redis-5.0.3]# cd data
[root@VM-16-10-centos redis-5.0.3]# mkdir 6379
(2) 修改拷贝的redis启动配置文件
vim /etc/redis.conf

修改以下配置
logfile "6380.log" #日志文件,默认会存放到配置的dir目录下
# 搜索dir修改dir存放路径
dir /usr/local/redis-5.0.3/data/6379
3.RDB数据持久化

RDB(Redis DataBase)快照(snapshot)
在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。

3.1 方式一:配置文件RDB持久化策略自动保存

以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:
save 60 1000 //关闭RDB只需要将所有的save保存策略注释掉即可

3.2 方式二:redis-cli客户端save和bgsave命令
redis-cli -p 6379 #进入6379端口的redis客户端
127.0.0.1:6379>save # 同步保存,会占用redis的线程
127.0.0.1:6379>bgsave #异步保存,会开启一个子线程

文件生成位置:在顶部配置的dir位置

4.AOF数据持久化

以日志的形式来记录每个写操作
每隔一段时间fsync到磁盘, Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。
如何开启?修改redis.conf文件

appendonly yes

redis的同步频率设置

appendfsync always # 每次有新命令追加到 AOF 文件时就执行一次 fsync ,非常慢,也非常安全。
appendfsync everysec # 每秒 fsync 一次,足够快,并且在故障时只会丢失 1 秒钟的数据。
appendfsync no # 从不 fsync ,将数据交给操作系统来处理。更快,也更不安全的选择。

文件生成位置:在顶部配置的dir位置和RDB保持一致(默认:dir ./ 生成位置在/usr/local下的bin目录下)

4.1 AOF重写压缩策略
# 进行命令
set a a1
set b b1
# 重写过后
set a a1 b b1

AOF文件里可能有太多没用指令,所以AOF会定期根据内存的最新数据生成aof文件

1.redis.conf配置自动重写策略
auto-aof-rewrite-min-size 64mb   //aof文件至少要达到64M才会自动重写,文件太小恢复速度本来就很快,重写的意义不大
auto-aof-rewrite-percentage 100  //aof文件自上一次重写后文件大小增长了100%则再次触发重写(即128MB会再次触发)
2.手动重写

AOF还可以手动重写,进入redis-cli客户端执行命令bgrewriteaof重写AOF
AOF重写redis会fork出一个子进程去做(与bgsave命令类似),不会对redis正常命令处理有太多影响
redis4.0版本后的重写,是指把rdb快照以二进制的形式附在aof头部,作为已有的历史数据,替换掉原来的流水账操作

总结AOF持久化流程

(1)客户端的请求命令会被append追加到AOF缓存区
(2)AOF缓存区根据AOF持久化策略【always ,everysec ,no】将操作sync同步到磁盘的AOF文件中
(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量

4.2 AOF和RDB同时开启,redis听谁的?

系统默认取AOF数据(因为数据不会存在丢失)

4.3 异常恢复

若遇到AOF文件损坏,通过

/usr/local/bin/redis-check-aof  --fix appendonly.aof # 进行恢复

备份被写坏的AOF文件
恢复:重启redis,然后重写加载

4.4 RDB和AOF优缺点
命令RDBAOF
启动优先级
体积
恢复速度
数据安全性容易丢数据根据策略决定
5.Redis 4.0 混合持久化

在这里插入图片描述

开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。

redis.conf 中配置开启混合持久化(必须先开启aof)

# 修改redis.conf中的以下配置
aof-use-rdb-preamble yes  

在 Redis 重启的时候,可以先加载 RDB 的内容,然后再重放增量 AOF 日志就可以完全替代之前的 AOF 全量文件重放,因此重启效率大幅得到提升。

6.通过持久化文件恢复数据

在我们持久化文件之后还需要对持久化文件进行备份重命名,此处在持久化目录做出以下配置

[root@VM-16-10-centos 6379]# mv dump.rdb dump.rdb.bak 
  [root@VM-16-10-centos 6379]# mv  appendonly.aof  appendonly.aof.bak

恢复数据
注意:在redis被关闭时,redis会自己给我们做一次持久化,重启之后redis内的数据会被清空。当我们关闭redis服务再重写启动时如何获取之前备份的数据。
恢复流程:修改备份数据名称为redis持久化文件名称–>再启动redis服务和客户端

1.此处我们配置的备份数据目录为:/usr/local/redis-5.0.3/data/6379,因此进入该目录
将之前备份的数据文件:
  appendonly.aof.bak 改为 appendonly.aof
  dump.rdb.bak 改为 dump.rdb
  [root@VM-16-10-centos 6379]# cp dump.rdb.bak  dump.rdb
  [root@VM-16-10-centos 6379]# cp  appendonly.aof.bak  appendonly.aof
  ##登录客户端
  [root@VM-16-10-centos ~]# redis-server /etc/redis.conf 
[root@VM-16-10-centos ~]# redis-cli -p 6379
客户端使用keys *查看数据已经恢复
7.redis定时任务备份数据

1.编辑定时任务

[root@VM-16-10-centos ~]# crontab -e
25 2 * * * sh /root/backup.sh # 每天2:25开始执行shell脚本

2.新建定时任务的脚本backup.sh,脚本代码如下

#! /bin/bash
PATH=/usr/local/bin:$PATH
redis-cli -h 127.0.0.1 -p 6379 -a 123456 bgsave
date=$(date +"%Y%m%d")
cp /root/dump.rdb /root/backup/$date.rdb
echo " 备份完成!"

3.查看任务执行日志

tail -f /var/log/cron

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:Redis5.0+——持久化——RDB&AOF-创新互联
文章路径:http://cdkjz.cn/article/dghjde.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220