Redis 第五集持久化方案RDB与AOF(Redis)

说明:

  1. 在windows中,redis3.x版本后不再提供技术支持,那么高版本的特性只好linux中玩。
  2. 本项目演示Redis持久化方案:RDB和AOF。
  3. 环境:Linux + Redis5.0.0

若有出入,欢迎指证,谢谢。参考资料:《Redis实战》

----------------------------------------------内容结构图---------------------------------------------

在这里插入图片描述

----------------------------linux中redis入门-----------------------------
一、Linux环境中Redis入门(@author:拈花为何不一笑)

官网上都有手把手的教你如何安装和简单使用Redis,如下:

 Download, extract and compile Redis with:

		$ wget http://download.redis.io/releases/redis-5.0.0.tar.gz #从官网下载redis
		$ tar xzf redis-5.0.0.tar.gz					#解压
		$ cd redis-5.0.0				#进入解压的目录
		$ make							#编译

		The binaries that are now compiled are available in the src directory. Run Redis with:

		$ src/redis-server  #使用默认配置redis.conf启动服务器(不要直接启动,先设置成后台里程)
		
					#设置成后台进程:设置配置文件redis.conf中daemonize为yes
							
		$ src/redis-server redis.conf								

		You can interact with Redis using the built-in client:

		$ src/redis-cli	#开启一个客户端连接Redis服务器,由于服务器使用的是默认的配置启动,
						#所以不需要指定端口和密码
		redis> set foo bar	#设置一个数据到Redis服务器,键名为foo,值为bar
		OK
		redis> get foo		#从Redis服务器中获取key为foo的数据
		"bar"

笔者Redis安装目录/usr/local/src/redis-5.0.0,安装成功后的界面,如下:
(友情提示:Linux环境下不要随意暴露布署的服务器端口号,密码等安全性信息)
在这里插入图片描述

----------------------------linux中两种持久化方案-----------------------------

二、Redis两种持久方案

Reids持久化准备工作,先配置Linux系统参数保证Redis缓存能写入到dbfinename文件和appendfilename文件中,解决Redis服务器重启后数据消失的问题。

在这里插入图片描述

1.RDB方式持久化

a.根据配置,快照将被写入dbfilename选项指定的文件里,并储存在dir选项指定的路径下。
b.创建快照和几种方式:
(b1).客户端向Redis服务器发送BGSAVE命令来创建一个快照,Redis会调用fork来创建一个子进程来
			负责 将快照写入磁盘达到持久化的目的。
(b2).客户端向Redis服务器发送SAVE命令来创建一个快照。
(b3).通过在配置文件中设置save选项,来触发BGSAVE命令创建快照。
(b4).客户端向Redis服务器发送shutdown命令时。
(b5).Redis服务器向另一台Redis服务器发送SYNC命令进行复制操作的时候。

c.在redis.conf中设置save选项来创建BGSAVE命令来创建快照,如下:
    save 900 1 
  #表示距Redis服务器上次成功创建快照900秒后,
  #并且执行了写操作,那么Redis会开始一次新的BGSAVE操作,从而把创建的快照持久化到磁盘上。

d.演示Redis-RDB方式持久化及发生故障时进行数据恢复
(i).首先在配置文件中设置选项,笔者自定义了一个配置文件名为"redis.custom.conf"(当Redis服务
	器启动时加载此配置文件即可) 配置好选项后,
	 记得重起Redis服务(可以先shutdow,再./src/redis-server redis.custom.conf)
(ii).然后模拟Redis服务器丢失数据,使用FLUSHALL命令把数据清除掉。然后再利
		用保存了快照的文件dump.rdb来恢复Redis服务器中和缓存里的数据。

如下图:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

说明:当Redis内存占用量达到几十个GB时且剩余内存空间不多或者运行在虚拟机上时,此时执行
BGSAVE可能会导致系统长时间停顿。
停顿的原因是由于BGSAVE创建子进程引起的。而SAVE命令不会导致停顿,但SAVE会阻塞,阻塞到
快照生成为止。
根据实践经验一个内存大小为60GB的虚拟机上,当Redis占用50G内存时,使用SAVE命令创建快照的
速度远胜过使用BGSAVE命令。 所以通常情况下会写脚本来调用SAVE命令来生成快照持久化到磁盘
中,由于它的阻塞原因,常常选择在深夜执行该脚本。

2.AOF持久化

a.	什么是AOF持久化? 
简单的来说,AOF持久化会将执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化。因此,
Redis只要从头到尾重新执行一次AOF文件中包含的所有写命令,就可以恢复AOF文件所记录的数据集。

b.	AOF持久化通过配置选项appendonly为yes来开启。(配置在redis.custom.conf文件中),重启Redis服
务器时加载配置文件redis.custom.conf然后根据指定的xxxx.aof来恢复数据。

c.	appendfsync选项可以设置AOF文件使用的同步频率为哪一种。

在这里插入图片描述

d.	重写和压缩AOF文件
由于Redis会不断的把写命令写到AOF文件中,AOF文件的体积越变越大,用户可以向Redis服务器进
行发送BGREWRITEAOF命令,这个命令可以移除AOF文件中冗余命令来重写AOF文件,使AOF文件
的体积尽可能的变得小。

e.	AOF持久化通过两个选项auto-aof-rewrite-percentage和auto-aof-rewrite-min-size进行。
假设用户在redis.custom.conf中配置了选项
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
持久化的同时,如果满足以下条件:
i.	启用了AOF持久化,AOF的体积大于64MB时,
ii.	并且AOF文件的体积比上一次重写后的体积至少大了一倍时
将触发Redis执行BGREWRITEAOF命令进行重写和压缩AOF文件。

f.	演示AOF持久化:
说明:这个演示与RDB类似,不同的是备份的文件由dbfilename dump.rdb变成 appendfilename 
appendonly.aof的备份(给appendonly.aof 文件备份appendonly.aof.bak,必须在FLUSHALL命令前,
因为这个命令会被记录于appendonly.aof文件中,那么恢复数据时,执行这个命令数据不也为空了?
所以要在这个命令之前备份。

具体思路:使用FLUSHALL命令清空所有数据,来模拟缓存数据的丢失,然后再这个备份文件覆盖
appendonly.aof来演示缓存的持久化
tips: redis-check-aof --fix appendonly.aof 用于修复appendonly.aof文件异常。

开始演示:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.Redis两种持久化的优缺点

1.Redis RDB持久化方案
优点:数据恢复更快。使用函数process_logs(conn,path,callback)来对日志进行聚合计算,通过
将日志处理的进度记录到Redis里面,当系统发生故障后,根据进度记录来完成之前未
完成的处理工作。
缺点:RDB方式数据完整性和一致性不高。从配置选项可以看出,它指定设置时间段
来创建快照,然后把数据持久化到存储介质中的。那么在这一段时间内快照创建失败将
会导致持久化失败。那么数据可能会丢失一大块。

2.Redis AOF持久化方案.
优点:AOF方式的数据完整性和一致性相对较高,当使用官方推荐的appendfsync everysec,
即使用持久化失败也是丢失1秒时间的数据。
 缺点:随着aof文件体积的变得越大,数据恢复变得越慢。因为Redis会从头到尾执行aof中所有写的命令。

此外:两种持久化方案在Redis中可以同时使用,也可以单独使用某一种。

参考资料:《Redis实战》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值