赞
踩
RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。
# 进入redis命令行接口
redis-cli
# 由Redis主进程来执行RDB,会阻塞所有命令
save
# 开启子进程执行RDB,避免主进程受到影响
bgsave
由于Redis的默认使用RDB持久化,手动关毕redis服务,会自动生成快照,启动时自动恢复快照信息,但是宕机不会生成快照。
# 首先需要安装Redis所需要的依赖
yum install -y gcc tcl
# 将下载好的Redis安装包上传到虚拟机的任意目录,解压缩
tar -xvf redis-6.2.4.tar.gz
# 进入redis目录
cd redis-6.2.4
# 运行编译命令
make && make install
# 修改redis.conf文件中的一些配置
# 绑定地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问
bind 0.0.0.0
# 数据库数量,设置为1
databases 1
# 启动Redis
redis-server redis.conf
# 停止redis服务
redis-cli shutdown
# 进入redis命令行接口
redis-cli
# 检测是否成功
ping
# 添加信息
set num 123
# 查看信息
get num
Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:
# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用RDB
save 900 1
save 300 10
# 代表60秒内至少执行10000次修改则触发RDB
save 60 10000
RDB的其它配置也可以在redis.conf文件中设置:
# 是否压缩 ,建议不开启,压缩也会消耗cpu,磁盘的话不值钱
rdbcompression yes
# RDB文件名称
dbfilename dump.rdb
# 文件保存的路径目录
dir ./
AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。
AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:
# 想要使用AOF,需要先禁用RDB
save ""
# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"
AOF的命令记录的频率也可以通过redis.conf文件来配:
# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always
# 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案
appendfsync everysec
# 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no
配置项 | 刷盘时机 | 优点 | 缺点 |
---|---|---|---|
Always | 同步刷盘 | 可靠性高,几乎不丢数据 | 性能影响大 |
everysec | 每秒刷盘 | 性能适中 | 最多丢失1秒数据 |
no | 操作系统控制 | 性能最好 | 可靠性较差,可能丢失大量数据 |
因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof
命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。
# 直接在redis-cli中执行bgrewriteaof命令执行重写功能
bgrewriteaof
set num 123
set name jack
set num 666
上面的式子第4行舍弃,将第5和第6行合并为下面的式子
mset name jack num 666
Redis也会在触发阈值时自动去重写AOF文件。阈值也可以在redis.conf中配置:
# AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb
RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。
** ** | RDB | AOF |
---|---|---|
持久化方式 | 定时对整个内存做快照 | 记录每一次执行的命令 |
数据完整性 | 不完整,两次备份之间会丢失 | 相对完整,取决于刷盘策略 |
文件大小 | 会有压缩,文件体积小 | 记录命令,文件体积很大 |
宕机恢复速度 | 很快 | 慢 |
数据恢复优先级 | 低,因为数据完整性不如AOF | 高,因为数据完整性更高 |
系统资源占用 | 高,大量CPU和内存消耗 | 低,主要是磁盘IO资源但AOF重写时会占用大量CPU和内存资源 |
使用场景 | 可以容忍数分钟的数据丢失,追求更快的启动速度 | 对数据安全性要求较高常见 |
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。
现在三个实例还没有任何关系,要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。
有临时和永久两种模式:
修改配置文件(永久生效)
slaveof <masterip> <masterport>
使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
slaveof <masterip> <masterport>
ps:在5.0以后新增命令replicaof,与salveof效果一致。
# 列举方式二
# 通过redis-cli命令连接
redis-cli -p 需要设置为slavel的Redis
# 执行slaveof
slaveof 主的ip 主的Redis
# 配置完从Redis,连接主Redis的redis-cli命令连接
redis-cli -p 主的Redis
# 查看状态
info replication
执行条件:slave节点第一次连接master节点时;
slave节点断开时间太久,repl_baklog中的offset已经被覆盖时
slave做数据同步,必须向master声明自己的replication id 和offset,master才可以判断到底需要同步哪些数据
全量同步的流程:
master如何判断slave节点是不是第一次来做数据同步?
答:master节点判断replication id是否一致来确定是不是第一次。
主从第一次同步是全量同步,但如果slave重启后同步,则执行增量同步
执行条件:slave节点断开又恢复,并且在repl_baklog中能找到offset时
pl_baklog大小有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致尚未备份的数据被覆盖,则无法基于log做增量同步,只能再次全量同步。
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。
哨兵的结构和作用如下:
Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:
一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据是这样的:
当选中了其中一个slave为新的master后(例如slave1),故障的转移的步骤如下:
在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。Spring的RedisTemplate底层
利用lettuce
实现了节点的感知和自动切换。
步骤:
ReadFrom是配置Redis的读取策略,是一个枚举,包括下面选择:
主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:
使用分片集群可以解决上述问题,分片集群特征:
Redis会把每一个master节点映射到0~16383共16384个插槽(hash slot)。
数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:
Redis如何判断某个key应该在哪个实例?
答:1.将16384个插槽分配到不同的实例;
2.根据key的有效部分计算哈希值,对16384取余;
3.余数作为插槽,寻找插槽所在实例即。。如何将同一类数据固定的保存在同一个Redis实例?
答:这一类数据使用相同的有效部分,例如key都以{typeId}为前缀。
redis-cli --cluster help
查看帮助文档。add-node
。当集群中有一个master宕机会发生什么呢?
利用cluster failover
命令可以手动让集群中的某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移。其流程如下:
手动的Failover支持三种不同模式:
RedisTemplate底层同样基于lettuce实现了分片集群的支持,而使用的步骤与哨兵模式基本一致:
->微服务技术栈高级篇--分布式缓存--Redis课程视频
高级篇Day3-01-Redis持久化_哔哩哔哩_bilibili
<-
记录每一个学习瞬间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。