每日十题八股-2025年1月3日

1.Redis为什么快?
2.Redis哪些地方使用了多线程?
3.Redis怎么实现的io多路复用?
4.Redis的网络模型是怎样的?
5.如何实现redis 原子性?
6.除了lua有没有什么也能保证redis的原子性?
7.Redis有哪2种持久化方式?分别的优缺点是什么?
8.过期删除策略和内存淘汰策略有什么区别?
9.介绍一下Redis 内存淘汰策略
10.介绍一下Redis过期删除策略

1.Redis为什么快?

核心原因是因为内存。redis是基于内存进行数据的存取的。
对于主要的核心的功能是基于单线程进行的,避免了线程的竞争与切换,同时避免了死锁。
Redis 采用了 I/O 多路复用机制(监听多个socket,实现单个线程处理多个IO流请求的要求。)处理大量的客户端 Socket 请求。
多路复用
参考2
在这里插入图片描述

2.Redis哪些地方使用了多线程?

Redis 单线程指的是「接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端」这个过程是由一个线程(主线程)来完成的。
除了此,Redis还有创建其他线程来执行后台任务,如异步处理关闭文件任务、AOF刷盘任务、释放内存任务。随着网络硬件性能的提升,Redis的性能瓶颈可能会出现在网络IO的处理上,因此还有IO多线程(多线程发数据,多线程读请求等)。
在这里插入图片描述

3.Redis怎么实现的io多路复用?

首先明确这里的IO是网络IO。(即对请求的读取和响应?)
多路:多个客户端连接(连接就是套接字描述符)。
复用:使用单进程就能够实现同时处理多个客户端的连接。
为什么要使用IO多路复用?网络数据IO的读入和写出耗时长,如果单线程会有大量等待时间。因此设置多路复用机制来让单线程避免等待,一直在工作。
具体的视线机制是:
在这里插入图片描述
在这里插入图片描述

IO 多路复用的底层实现有 select、poll、epoll,而 Reactor 模式是对 IO 多路复用的封装。

Redis服务采用Reactor的方式来实现文件事件处理器(每一个网络连接其实都对应一个文件描述符)Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。
它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。
因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。

Reactor模式是一种经典的设计模式,它用于处理并发事件。 在Reactor模式中,有一个或多个事件处理器(也称为Reactor)负责监听和分发事件。 当事件发生时,事件处理器会将其分发给相应的处理程序进行处理。 这种模型可以高效地处理大量并发事件,从而提高系统的吞吐量和响应速度。

参考

4.Redis的网络模型是怎样的?

Redis 6.0 版本之前,是用的是单Reactor单线程的模式。
随着网络硬件性能的提升,Redis的性能瓶颈可能会出现在网络IO的处理上,因此就将网络IO的处理改成多线程的方式了。

5.如何实现redis 原子性?

edis 执行一条命令的时候是具备原子性的,因为 redis 执行命令的时候是单线程来处理的,不存在多线程安全的问题。
如果要保证 2 条命令的原子性的话,可以考虑用 lua 脚本。将多个操作写到一个 Lua 脚本中,Redis 会把整个 Lua 脚本作为一个整体执行,在执行的过程中不会被其他命令打断,从而保证了 Lua 脚本中操作的原子性。
在这里插入图片描述

6.除了lua有没有什么也能保证redis的原子性?

Redis也有事务机制,但是不提供回滚服务。也就是说事务的执行是原子的。但是不成功,执行过的操作是不能回滚的。

7.Redis有哪2种持久化方式?分别的优缺点是什么?

在这里插入图片描述
在这里插入图片描述AOF需要全量把日志都执行一遍,一旦 AOF 日志非常多,势必会造成 Redis 的恢复操作缓慢。
在这里插入图片描述
AOF:记录写操作,采取追加手段,除了No状态,其他状态导致数据丢失极少。但是记录量大,恢复操作复杂慢。
RDB:恢复时直接写入内存,不需要执行写操作恢复,并且有bgsave避免主线程阻塞。但是,因为创建快照时间不定,会造成较多的数据丢失。

8.过期删除策略和内存淘汰策略有什么区别?

内存淘汰策略是在内存满了的时候,redis 会触发内存淘汰策略,来淘汰一些不必要的内存资源,以腾出空间,来保存新的内容。
过期键删除策略是将已过期的键值对进行删除,Redis 采用的删除策略是惰性删除+定期删除。

9.介绍一下Redis 内存淘汰策略

在这里插入图片描述
不淘汰,禁止写入。
淘汰过期最久,淘汰最少使用,淘汰最近最少使用之类的方法。

10.介绍一下Redis过期删除策略

惰性删除和定时删除。
惰性删除是用到这个数据的时候判断是否过期,过期的话就依照lazyfree_lazy_expire参数的配置决定是同步删除或者异步删除。
定时删除是定时抽取一批20个key,检查过期,如果超过5个key过期,继续抽取检查是否过期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值