redis持久化的方式? redis的集群模式?

1. redis的持久化机制

1.1 什么是持久化

持久化是指将数据从内存存储到持久存储介质(如磁盘),以确保数据在系统重启、崩溃或其他故障情况下不会丢失。

1.2 为什么要持久化

内存数据库具有高速读写的优势,但由于数据存储在内存中,一旦服务器停止或崩溃,所有数据将会丢失。持久化机制的引入旨在将内存中的数据持久化到磁盘上,从而在服务器重启后能够恢复数据,提供更好的数据保护和可靠性。

1.3 redis实现持久化的方式

Redis提供了两种主要的持久化机制,分别是RDB(Redis Database)AOF(Append-Only File)。这两种机制可以根据不同的需求和场景来选择使用。

1.3.1 什么是RDB

RDB:快照模式是一种全量持久化方式,它会周期性地将内存中的数据以二进制格式保存到磁盘上的RDB文件。RDB文件是一个经过压缩的二进制文件,包含了数据库在某个时间点的数据快照。RDB快照有助于实现紧凑的数据存储,适合用于备份和恢复。默认启用该模式

什么时候会触发RDB模式
有两种触发方式:手动触发和自动触发

1.手动触发:save和bgsave手动触发rdb
保存的名称dump.rdb

save该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:

在这里插入图片描述
执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。

bgsave:

执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:
在这里插入图片描述
bgsave在执行该命令时会fork出一个新的线程,单独执行rdb持久化操作,而不影响其他客户对redis服务的操作。—唯一的多线程。

2.自动触发: 通过配置文件搞定

需要修改配置文件
在这里插入图片描述

优点:
- RDB快照在恢复大数据集时速度较快,因为它是全量的数据快照。
- 由于RDB文件是压缩的二进制文件,它在磁盘上的存储空间相对较小。
- 适用于数据备份和灾难恢复。

缺点:
- RDB快照是周期性的全量持久化,可能导致某个时间点之后的数据丢失。
- 在保存快照时,Redis服务器会阻塞,可能对系统性能造成影响。

1.3.2 什么是AOF

AOF日志是一种追加式持久化方式,它记录了每个写操作命令,以追加的方式将命令写入AOF文件。通过重新执行AOF文件中的命令,可以重建出数据在内存中的状态。AOF日志提供了更精确的持久化,适用于需要更高数据安全性和实时性的场景。

使用时把redis.conf配置文件中的appendonly no改为appendonly yes即可

在这里插入图片描述

优点:
- AOF日志可以实现更精确的数据持久化,每个写操作都会被记录。
- 在AOF文件中,数据可以更好地恢复,因为它保存了所有的写操作历史。
- AOF日志适用于需要实时恢复数据的场景,如秒级数据恢复要求。

缺点:
- AOF日志相对于RDB快照来说,可能会占用更多的磁盘空间,因为它是记录每个写操作的文本文件。
- AOF日志在恢复大数据集时可能会比RDB快照慢,因为需要逐条执行写操作。

2. redis的集群模式

redis提供了三种集群模式.
第一种: 主从模式。3一下
第二种: 哨兵模式 5以下
第三种: 去中心化模式

为什么使用redis集群?

提高并发量,提高了可用性。

2.1 主从模式

redis主从模式表示一个主节点跟若干个从节点。 主节点可以负责写操作和读操作。而从节点只负责读操作。主节点的数据会自动同步到所有的从节点上。

如何搭建redis主从模式

为了操作方便: 在一台linux上跑三个redis服务器。 只要保证端口号不同即可。

修改配置文件

1.端口号
2.dump文件的名称
3.aof的名称

开启三台redis服务

redis-server redisXXX.conf

在这里插入图片描述

配置主从关系

 配从不配主  slaveof 主节点IP 主节点port

 info replication 查看主从的状态

下面配置从节点
slaveof 192.168.111.188 6380
在这里插入图片描述

主从模式的缺点: 不会自动选举master节点。导致一旦主节点宕机,无法进行写操作。

2.2 哨兵模式

为了解决主从模式的缺陷: 当主节点宕机后,从节点无法直接上位。

工作原理
当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。
具体流程如图所示:
在这里插入图片描述

1.哨兵机制建立了多个哨兵节点(进程),共同监控数据节点的运行状况。
2.同时哨兵节点之间也互相通信,交换对主从节点的监控状况。
3.每隔1秒每个哨兵会向整个集群:Master主服务器+Slave从服务器+其他Sentinel(哨兵)进程,发
送一次ping命令做一次心跳检测。

准备条件

修改sentinel.conf
在这里插入图片描述
启动哨兵服务

redis-sentinel sentinel.conf

注意:在linux桥接模式时候,建议搭建的linux服务器放行所有哨兵,以及所有redis的端口号(不建议关闭防火墙)

当主节点宕机后
在这里插入图片描述

2.3 去中心化模式

redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个整数结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

当你往Redis Cluster中加入一个Key时,会根据crc16(key) mod 16384计算这个key应该分布到哪个hash slot中,一个hash slot中会有很多key和value。你可以理解成表的分区,使用单节点时的redis时只有一个表,所有的key都放在这个表里;改用Redis Cluster以后会自动为你生成16384个分区表,你insert数据时会根据上面的简单算法来决定你的key应该存在哪个分区,每个分区里有很多key。

去中心化至少是三主三从

1. 修改redis.conf配置文件

1. 修改端口
2. dump文件名
3. aof文件名
4. aof目录名
5. 开启集群模式cluster-enabled yes
6. cluster-config-file nodes-7001.conf

在这里插入图片描述
2. 启动redis

3. 分槽,以及设置主从关系

redis-cli --cluster create --cluster-replicas 1 192.168.111.188:7001 192.168.111.188:7002 192.168.111.188:7003 192.168.111.188:7004 192.1 68.111.188:7005 192.168.111.188:7006 

在这里插入图片描述
命令行的客户端
随意使用一个端口,会根据计算出的结果跳转到相应的端口

redis-cli -c -h 192.168.111.188 -p 7006
  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值