Redis 如何处理持久化数据?
答:Redis 提供了两种方式来处理持久化数据:快照(snapshotting)和日志(append-only file)。
快照是 Redis 的默认持久化方式。它通过将 Redis 内存中的数据快照保存到硬盘上的一个二进制文件(RDB 文件),来实现数据的持久化。快照可以手动触发,也可以根据配置文件中的自动保存规则定期触发。在进行快照时,Redis 会创建一个子进程来处理数据的写入和保存操作,以避免阻塞主进程的正常运行。使用快照方式可以在系统故障或重启后快速恢复数据,但可能会丢失最后一次快照之后的数据。
日志方式(AOF)是一种追加日志文件的方式。当 Redis 执行写操作(如插入、更新、删除等)时,会将相应的命令以追加的方式写入到一个日志文件中。这个日志文件会不断增长,但在 Redis 会定期或根据配置的规则将旧的、已经执行的命令合并成一条命令,释放空间。通过读取日志文件中的命令,Redis 可以重放命令来恢复数据,从而实现持久化。使用日志方式可以保证数据的实时持久化,但相比快照方式,日志方式对磁盘的 IO 是连续写入,可能会影响系统的性能。
Redis 还可以同时使用快照和日志方式,以充分利用它们的优势。开发者可以根据具体的需求和系统的特点选择合适的持久化方式,以实现数据的持久化和恢复。
Redis 如何处理主从复制?
答:Redis 使用主从复制来实现数据的备份和读写分离。
主从复制的过程如下:
配置主节点:在 Redis 主节点上设置相关的配置,包括指定一个密码(可选),监听接口,以及开启复制功能。
配置从节点:在 Redis 从节点上设置相关的配置,包括指定主节点的 IP 地址和端口号,复制密码(可选),以及开启从节点的复制功能。
建立连接:从节点向主节点发送 SYNC 命令,请求进行复制。主节点接收到请求后会生成一个 RDB 文件(快照)或者 AOF 文件(日志)发送给从节点。
数据同步:从节点接收到主节点发送的快照文件或者增量日志文件后,将文件中的数据加载到自己的内存中。之后,主节点会再将写命令以流的形式发送给从节点,从节点执行这些写命令,保持与主节点的数据一致性。
主从复制过程中,主节点会将写命令发送给从节点,从节点只能执行这些写命令,不能向主节点进行写操作。这样,主节点负责写操作,从节点负责读操作,可以实现读写分离,提高系统的并发处理能力。
主从复制可以提供数据的冗余备份,增加了数据的可靠性和可用性,并允许在从节点上进行一些只读操作,减轻主节点的负载。当主节点发生故障时,可以快速切换到从节点继续提供服务,实现高可用性。
需要注意的是,主从复制并不适用于高可扩展性的场景,因为所有的数据写操作都要经过主节点,所以主从复制不能解决写操作的性能瓶颈。对于需要水平扩展的场景,可以考虑使用 Redis Cluster,它提供了分布式和自动分片的能力。