1.redis的持久化机制
内存数据库具有高速读写的优势,但由于数据存储在内存中,一旦服务器停止或崩溃,所有数据将会丢失。持久化机制的引入旨在将内存中的数据持久化到磁盘上,从而在服务器重启后能够恢复数据,提供更好的数据保护和可靠性。
1.1 redis实现持久化的方式
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主从模式表示一个主节点跟若干个从节点。 主节点可以负责写操作和读操作。而从节点只负责读操作。主节点的数据会自动同步到所有的从节点上。
第一步:搭建redis主从模式修改redis.conf配置文件
1.端口号
2.dump文件的名称
3.aof的名称第二步:启动redis服务并配置主从关系
配从不配主 slaveof 主节点IP 主节点portinfo 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