redis的持久化机制以及集群模式

1.redis的持久化机制

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

1.1 redis实现持久化的方式
tex 复制代码
Redis提供了两种主要的持久化机制,分别是RDB快照(Snapshotting)和AOF日志(Append-Only File)。这两种机制可以根据不同的需求和场景来选择使用。

RDB快照(Snapshotting):默认情况下使用该模式

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

什么时候触发RDB模式?

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

2.自动触发: 通过修改redis.conf配置文件

优点:

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

缺点:

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

AOF日志(Append-Only File):默认不开启,需要改配置文件开启

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

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

启用后生成的日志文件:

优点:

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

缺点:

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

2. redis的集群模式

redis提供了三种集群模式.

第一种: 主从模式。redis3以下

第二种: 哨兵模式 redis5以下

第三种: 去中心化模式

为什么使用redis集群?

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

2.1 主从模式

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

tex 复制代码
第一步:搭建redis主从模式

修改redis.conf配置文件
1.端口号
2.dump文件的名称
3.aof的名称

第二步:启动redis服务并配置主从关系
配从不配主  slaveof 主节点IP 主节点port

info replication 查看主从的状态

配置从节点

查看主节点

查看从节点

思考?
1. 如果某台slave宕机,如果恢复后是否具有master新增的数据呢。 [有]
2. master宕机后,slave会不会自动选举主节点。 [不会] ---[导致一旦主节点宕机,无法进行写操作。]
2.2 哨兵模式

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

工作原理:

第一步:
修改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。

最少三主三从

第一步:修改redis.conf配置文件
1. 修改端口 
2. dump文件名
3. aof文件名
4. aof目录名 
5. 开启集群模式 cluster-enabled yes
6. cluster-config-file nodes-7001.conf
第二步:启动redis

第三步:分配槽以及主从关系
redis-cli --cluster create --cluster-replicas 1 172.16.7.110:7000 172.16.7.149:6391 172.16.7.110:7001 172.16.7.149:6394 172.16.7.110:7002 172.16.7.149:6395

发现172.16.7.110:7001为主节点,但是出现故障时(可以自动选举在从节点中)

命令行的客户端

redis-cli -c -h 192.168.111.188 -p 7006
相关推荐
YashanDB7 分钟前
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
数据库·yashandb·崖山数据库·yashandb知识库
ljh57464911917 分钟前
thinkphp8 redis队列
数据库·redis·github
DengHua220327 分钟前
GitLab发送邮件功能详解:如何配置自动化?
服务器·github·api接口·邮件营销·外贸开发信·邮件群发·邮件接口
OpenCSG35 分钟前
OpenCSG DataFlow:锻造大模型智慧的炼金术,开启数据集Agentic新范式
数据库·人工智能·数据处理·agentic
程序人生5182 小时前
PostgreSQL分区表
数据库·postgresql·分区表
bug菌¹2 小时前
滚雪球学MySQL[3.1讲]: 高级SQL查询
数据库·sql·mysql
燕雀安知鸿鹄之志哉.2 小时前
玄机:第二章 日志分析-mysql应急响应
数据库·经验分享·mysql·安全·web安全·网络安全
Janusne3 小时前
高效修复MySQL数据库
数据库·mysql·phpmyadmin·dbf for mysql
才艺のblog3 小时前
PG数据库的Jsonb全文检索查询
数据库·postgresql·jsonb