Redis作为一款高性能的内存数据库,其在持久化、主从复制和哨兵系统方面的支持使其在大规模应用和高可用性场景中脱颖而出。本文将深入探讨Redis的持久化机制、主从复制以及哨兵系统,为构建强大而稳定的数据生态揭示关键技术。
持久化:数据的保险箱
Redis的持久化机制旨在保障数据在内存中的安全。有两种主要的持久化方式:
-
RDB(Redis DataBase)快照: 定期将内存中的数据以快照的形式保存到磁盘上。这种方式适用于数据较为稳定,且可以接受在定期时间点进行备份的场景。
save :可在Redis配置文件配置 同步 会阻塞Redis其他命令 bgsave :写时复制机制(COW copy on write) 异步 不会阻塞Redis其他命令 Save 60 100 在60秒内执行了100条键值更新则备份一次进行数据持久化
-
AOF(Append Only File)日志: 将每次写操作追加到文件中,以此来记录数据的变更。AOF的优势在于在系统异常宕机时,可以通过重放日志文件来恢复数据。
将Redis没更新一条记录都记录进文件中,每隔一段时间同步到磁盘,可手动配置隔多久同步一次至磁盘
Redis默认开启的是RDB,默认使用AOF恢复数据
Redis4.0增加混合持久化,开启的前提是先开启AOF,AOF重写时(备份时)给指令压缩成二进制(RDB存储格式)写进文件中,当在备份时在执行的命令,以AOF存储的命令追加进文件中,只要持久化的文件存在就可以恢复Redis数据
Redis数据备份策略:1. 写crontab定时调度脚本,每小时都copy一个rdb或aof的备份到目录中,仅仅保留近48小时的备份 2. 每天都保留一份当日的备份数据到目录中,保留近一个月的备份 3. 每次copy备份的时候都给旧的删除了 4. 每天晚上将当前机器上的备份复制一份到其它机器上,防止机器损坏
主从复制:高可用性的支柱
主从复制是Redis实现高可用性的重要手段。在主从架构中,一个节点(主节点)负责写操作,而其他节点(从节点)复制主节点的数据。这带来了以下优势:
- 负载均衡: 主节点处理写请求,从节点处理读请求,有效分担了系统负载。
- 数据备份: 从节点作为主节点的镜像,即使主节点宕机,从节点仍然保留数据的副本。
搭建多个redis,在从Redis的配置文件配置一个 replicaof host:port 如replicaof 127.0.0.1:6379 则当前Redis会主动去127.0.0.1:6379所在的Redis同步数据过来
Replica-read-only yes 配置从节点只读
主从数据同步(全量)流程图
主从数据同步(断点)流程图
如果有很多从节点,为了缓解主节点的数据同步压力,可以适当调整从节点架构配置,调整部分从节点和从节点进行同步数据
如果redis要整读写分离,则需要在代码上进行读写拦截然后取对应的主从库读写数据
redis的管道:可以一次性给十条命令通过一次IO发送给Redis,让Redis批量执行,节省了9次的io操作,管道不是原子的
redis的lua脚本:lua脚本具备原子性,替代Redis的事务,并且可以减少io开销 lua脚本不要出现死循环和耗时的运算,否则Redis会阻塞不执行其他的命令,Redis是单线程 ,管道不会阻塞Redis
哨兵系统:自动化的守护者
哨兵系统是Redis用于监控和自动化处理节点故障的工具。哨兵系统可以实现:
- 故障检测: 监控主节点和从节点的健康状态,发现异常情况。
- 自动故障转移: 当主节点宕机时,哨兵系统可以自动选举一个从节点成为新的主节点,确保系统的持续可用性。
redis哨兵高可用架构(sentinel)
sentinel只负责监听,当主节点挂了, sentinel会重新选举出一个从节点为新的主节点,之前的主节点恢复后会变成从节点与新的主节点进行数据同步哨兵挂了,整个Redis都不可访问
构建强大而稳定的数据生态
将持久化、主从复制和哨兵系统结合使用,可以构建一个强大而稳定的Redis数据生态。持久化机制保障数据的持久性,主从复制提供了负载均衡和数据备份,而哨兵系统则自动处理节点故障,保障系统的高可用性。
在这个数据生态中,Redis不仅是一个高性能的内存数据库,更是一个可靠的数据存储和处理平台。通过深度集成这些特性,开发者可以放心地构建出应对各种挑战的应用系统,从而在数据的世界里走得更远。