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过期,继续抽取检查是否过期。
1004

被折叠的 条评论
为什么被折叠?



