【Redis】Redis 的线程模型,为什么 Redis 要把所有数据放到内存?Redis 的同步机制,Redis 持久化,RDB 持久化方式

本文详细阐述了Redis的单线程线程模型,强调内存作为快速读取的优势以及为何将数据放在内存。讨论了Redis的同步机制,包括主从同步的过程,以及RDB和AOF两种持久化方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Redis 的线程模型

为什么 Redis 要把所有数据放到内存?

Redis 的同步机制

Redis 持久化

RDB 持久化方式


Redis 的线程模型

Redis 内部使用文件事件处理器 file event handler ,这个文件事件处理器是单线程的,所以Redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket ,根据 socket 上的事件来选择对应的事件处理器进行处理。

文件事件处理器的结构包含 4 个部分:

  1. 多个 socket 。

  2. IO 多路复用程序。

  3. 文件事件分派器。

  4. 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)。

多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将 socket 产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。

为什么 Redis 要把所有数据放到内存?

Redis 将数据放在内存中有一个好处,那就是可以实现最快的对数据读取,如果数据存储在硬盘中,磁盘 I/O 会严重影响 Redis 的性能。而且 Redis 还提供了数据持久化功能,不用担心服务器重启对内存中数据的影响。其次现在硬件越来越便宜的情况下,Redis 的使用也被应用得越来越多,使得它拥有很大的优势。

Redis 的同步机制

Redis 支持主从同步、从从同步。如果是第一次进行主从同步,主节点需要使用 bgsave 命令,再将后续修改操作记录到内存的缓冲区,等 RDB 文件全部同步到复制节点,复制节点接受完成后将RDB 镜像记载到内存中。等加载完成后,复制节点通知主节点将复制期间修改的操作记录同步到复制节点,即可完成同步过程。

Redis 持久化

Redis 提供两种持久化机制 RDB 和 AOF 机制:

RDB 持久化方式

RDB 就是快照/内存快照,RDB持久化是把当前进程数据生成快照保存到磁盘上的过程,由于是某一时刻的快照,那么快照中的值要早于或者等于内存中的值。

优点:

  • RDB文件是某个时间节点的快照,默认使用LZF算法进行压缩,压缩后的文件体积远远小于内存大小,适用于备份、全量复制等场景;

  • Redis加载RDB文件恢复数据要远远快于AOF方式;

缺点:

  • 数据安全性低。 RDB 是间隔一段时间进行持久化,如果持久化之间 Redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候

  • RDB方式实时性不够,无法做到秒级的持久化;

  • 每次调用bgsave都需要fork子进程,fork子进程属于重量级操作,频繁执行成本较高;

  • RDB文件是二进制的,没有可读性,AOF文件在了解其结构的情况下可以手动修改或者补全;

  • 版本兼容RDB文件问题;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值