
redis 笔记三(热点知识)
Redis 为什么快?
1、完全基于内存
2、使用单线程,避免了线程切换和竞态产生的消耗
3、基于非阻塞的IO多路复用机制
4、C语言实现,优化过的数据结构,基于几种基础的数据结构,redis做了大量的优化性能极高
IO多路复用
I/O 多路复用是一种高效的 I/O 模型,它允许一个进程同时监视多个文件描述符(如套接字),并在其中任何一个文件描述符准备好进行读写操作时通知进程。这种机制大大提高了 I/O 操作的效率,特别是在处理大量并发连接时。
常见的实现
1、select 是最早的 I/O 多路复用系统调用之一,广泛应用于 Unix 和类 Unix 系统。
优点:跨平台性好,几乎所有操作系统都支持。
缺点:最大文件描述符数量有限制(通常是 1024),性能随文件描述符数量增加而下降。
2、poll 是 select 的改进版,没有文件描述符数量限制,但性能仍然受文件描述符数量的影响。
优点:没有文件描述符数量限制。
缺点:性能随文件描述符数量增加而下降。
3、epoll 是 Linux 内核提供的 I/O 多路复用机制,性能优越,特别适合处理大量并发连接。
优点:性能高,扩展性好,支持大量文件描述符。
缺点:仅限于 Linux 系统。
4、kqueue 是 FreeBSD 和 macOS 提供的 I/O 多路复用机制,类似于 epoll,性能优越。
优点:性能高,扩展性好。
缺点:仅限于 FreeBSD 和 macOS 系统
Redis 使用 epoll 来处理高并发请求。
Redis6.0使用多线程是怎么回事?
redis6.0 多线程是用多线程处理数据的读写和协议解析, 但是Redis 执行命令还是单线程的;
这样做的是因为Redis的性能瓶颈在于网络IO而非CPI,使用多线程能提升IO读写的效率,从而整体提升Redis的性能;
Redis的持久化方式有哪些?有什么区别?
Redis 提供了两种主要的持久化方式:RDB(Redis Database Backup)和 AOF(Append Only File)。这两种方式各有优缺点,适用于不同的场景。下面是它们的详细介绍和对比:
RDB(Redis Database Backup)
工作原理
RDB 是一种快照持久化方式,定期将内存中的数据集快照写入磁盘。
Redis 可以配置在特定的时间间隔内,如果超过一定数量的键发生变化,则触发一次快照操作。
配置-触发
SAVE:同步命令,阻塞服务器,适用于维护窗口或低流量时段。
BGSAVE:异步命令,不阻塞服务器,适用于生产环境,推荐使用。
自动触发:通过配置 save 参数,Redis 会自动调用 BGSAVE 来创建 RDB 快照,确保数据的持久化。
优点
性能高:RDB 快照是将内存中的数据一次性写入磁盘,速度快,对性能影响小。
恢复速度快:RDB 文件是一个紧凑的二进制文件,恢复时加载速度快。
文件体积小:RDB 文件体积较小,适合备份和传输。
缺点
数据丢失风险:如果 Redis 在两次快照之间崩溃,会丢失最后一次快照之后的所有数据。
无法细粒度控制:RDB 快照是全量备份,无法恢复到某一秒的状态。
AOF(Append Only File)
工作原理
AOF 记录服务器接收到的每一个写操作命令,并在服务器启动时重新执行这些命令来恢复数据。
AOF 文件是一个只追加的日志文件,每次写操作都会被追加到文件末尾。
配置
appendonly yes:启用 AOF 持久化。
appendfsync always:每次写操作后立即同步到磁盘,最安全但性能最低。
appendfsync everysec:每秒同步一次,平衡了安全性和性能。
appendfsync no:由操作系统决定何时同步,性能最高但安全性最低。
优点
数据安全性高:AOF 可以记录每一个写操作,即使在服务器崩溃时,也可以恢复到最近的一次写操作。
可恢复到任意状态:AOF 文件可以重放,恢复到任意状态。
缺点
文件体积大:AOF 文件记录了所有的写操作,文件体积较大。
恢复速度慢:AOF 文件需要逐条执行命令来恢复数据,恢复速度较慢。
性能影响:频繁的写操作会导致 AOF 文件迅速增长,需要定期进行重写(rewrite)来压缩文件。
重写(Rewrite)
AOF 重写是在后台生成一个新的 AOF 文件,这个文件包含了恢复当前数据集所需的最小命令集。
重写过程不会影响现有的 AOF 文件,也不会影响客户端的读写操作。
重写后的 AOF 文件体积更小,恢复速度更快。
综合使用
混合使用:为了兼顾性能和数据安全性,可以同时启用 RDB 和 AOF。
RDB 用于定期备份,AOF 用于实时记录写操作。
在恢复数据时,先加载 RDB 文件,再加载 AOF 文件,可以快速恢复到最新的状态。
总结
RDB 适用于对性能要求较高,可以接受少量数据丢失的场景。
AOF 适用于对数据安全性要求较高,需要尽量减少数据丢失的场景。
混合使用 可以结合两者的优点,提供更好的性能和数据安全性。