单机数据库 redis面试题

注:redis服务器默认会创建16个数据库
1、redis怎么实现数据库的切换的?
改变redsiclient.db指针的指向。默认指向0号数据库
2、redis是如何保存键值对的?
redis数据库的dict字典保存了数据库的所有键值,这个字典被称为键空间,每一个键都是字符串对象,值可以是字符串,列表,集合,有序集合,hash对象。添加新键就是添加到dict里面
3、redis怎么实现过期策略的?
redis里面保存有一个过期字典,键为一个指针指向数据库某个键,值为过期时间,精确到毫秒。
4、删除过期键怎么实现?各有什么优缺点
定时删除:通过设置定时器,过期后立即删除键。(内存友好,cpu不友好)
惰性删除:放任过期键不管,在每次获取键时,判断是否过期,过期则删除该键。(CPU友好,内存不友好)
定期删除:每个一端时间,对数据库进行检查删除过期键。(前两种策略的折中)
redis实际使用的是配合使用惰性策略和定期删除
5、启动服务器时对过期键怎么处理?
载入rdb文件时:服务器是主服务器时过期键不会载入。
服务器是从服务器时会载入过期键,但是在sync过程中会删除过期键。
如果是aof持久化,那么过期键不会有任何影响,因为过期之后服务器会向aof文件添加一条删除命令。
注:为了保持数据一致性,从服务器的过期键由主服务器删除。
6、介绍下rdb持久化
rdb持久化就是把数据库状态保存为经过压缩的二进制文件,通过该文件可以还原数据库状态。rdb文件的创建有两种方式,一种是同步,一种是异步。同步直接阻塞服务器,生成文件。异步是由一个子进程去创建文件。
7、为什么在开启aof功能后,会优先使用aof来还原服务器状态?
aof文件的更新频率比rdb文件快,数据齐全,并且执行效率比rdb高
8、aof如何实现持久化
通过保存redis服务器执行的写命令来记录数据库的状态
9、aof如何实现文件同步
每次写命令都会追加到aof_buf缓冲区,时间事件 结束之后就把aof_buf缓冲区的写命令同步到aof文件
10、redis读取aof文件的步骤
1、创建一个不带网络连接的伪客户端:
2、从aof文件分析并读取出一条写命令
3、使用伪客户端执行写命令
4、重复2,3步骤
11、aof记录的写命令会越来越多,如何解决(什么是aof重写)
通过aof重写,即读取当前数据库的状态,用一条命令去记录键值对代替之前记录的多条命令。
aof重写过程:
1、子进程重写,记录数据库副本的写命令
2、子进程向服务器进程发送信号,服务器进程阻塞。服务器进程把aof重写缓冲区的内容追加到新的aof文件末尾。取消阻塞。
12、(为什么用子进程重写)aof用子进程重写有什么好处
父进程可以继续处理命令。
由于重写会耗费大量时间,避免过长时间阻塞父进程。
子进程带有服务器的数据副本,使用子进程而不是线程,可以避免使用锁,保证数据安全性。
13、介绍下redis的事件
redis是事件驱动的服务器,服务器需要处理两类事件:
文件事件: 服务器通过套接字与客户端进行连接,文件事件就是服务器对套接字操作的抽象,服务端与客户端的通信会产生相应的文件事件,服务器通过监听处理事件来完成网络通信。
时间事件:指的是对redis的一些需要在给定的时间点执行的操作的抽象。
14、具体的讲一下文件事件处理器?
文件事件处理器是基于reactor模式开发的,使用了I/O多路复用程序来监听多个套接字,redis的多路复用包装常见的select、epoll这些多路复用函数库实现的。在这里插入图片描述
处理器类型:命令请求处理器,命令回复处理器,连接应答处理器,复制处理器等。
15、具体讲一下时间事件处理器
时间事件分为两类,定时事件,周期性事件。
所有事件事件都是在一个无序链表中每当时间事件执行器运行时,就会遍历链表查找已到达的时间事件。

发布了79 篇原创文章 · 获赞 0 · 访问量 2669

猜你喜欢

转载自blog.csdn.net/qq_41017546/article/details/104998380