1.Redis五种数据结构类型
STRING(字符串类型)、LIST(链表)、SET(集合)、HASH(哈希)、ZSET(有序集合)。
2.Redis为何采用单线程单进程?
1.完全基于内存。
2.数据结构简单,对数据操作也简单。
3.文件事件中使用了I/O多路复用模型。
3.Redis中Sentinel的作用
Sentinel的作用是通过Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,完成故障转移。
4.Redis中何为主观下线,何为客观下线?
在默认情况下,Sentinel会以每秒一次的频率向所有与它创建了命令连接的实例发送PING命令,如果在参数down-after-milliseconds设置的时间范围内实例没有回复,则说明该实例主观下线。
当Sentinel将一个主服务器判断为主观下线之后,会向同样监视这一主服务器的其它Sentinel进行询问,看它们是否也认为主服务器已经进入下线状态。当Sentinel从其它Sentinel那里接收到足够数量的已下线判断之后,Sentinel就会将从服务器判定为客观下线。
5.Redis中如何选举领头哨兵?
Redis中,当一个主服务器被判断为客观下线,监视这个下线主服务器的各个Sentinel会进行协商,选举出一个领头Sentinel。选举领头Sentinel的规则和方法:1).每次选举就会自增配置纪元,表示不同轮次的选举。2).每个配置纪元中,所有Sentinel都有一次将某个Sentinel设置为局部领头Sentinel的机会。3).当发现主服务器客观下线的Sentinel都会要求其他Sentinel将自己设置为局部领头Sentinel。4)设置局部领头Sentinel遵循先到先得的规则。5)如果某个Sentinel被半数以上的Sentinel设置成了局部领头Sentinel,那么这个Sentinel就是领头Sentinel。
6.Redis中如何利用Sentinel实现故障转移?
在选举出领头Sentinel之后,领头Sentinel将对已下线的主服务器执行故障转移操作,该操作包含以下三个步骤:
1).在已下线主服务器属下的所有从服务器里面挑选一个从服务器,将其转换为主服务器。
2).让已下线主服务器属下的所有从服务器改为复制新的主服务器。
3).将已下线主服务器设置为新的主服务器的从服务器,当这个旧的主服务器重新上线时,它将会成为新的主服务器的从服务器。
7.Redis故障转移时如何挑选新的主服务器?
领头Sentinel会将已下线主服务器的所有从服务器保存到一个列表里面,然后按照以下规则,一项一项地对列表进行过滤:
1).删除列表中所有处于下线或者断线状态的从服务器。
2).删除列表中所有最近5秒没有回复过领头Sentinel的INFO命令的从服务器。
3).删除所有与已下线主服务器连接断开超过down-after-milliseconds*10ms的从服务器。保证数据比较新。
之后,领头Sentinel将根据从服务器的优先级对列表剩余的从服务器进行排序;如果出现多个具有最高优先级的从服务器,那么则按照从服务器的复制偏移量对这些最高优先级的从服务器进行排序;如果出现多个符合的从服务器,则按照运行ID进行排序,选择运行ID最小的从服务器。
8.Redis的持久化方式以及对应的特点?
RDB持久化和AOF持久化。
RDB持久化则将数据库的状态压缩成一个二进制文件保存在硬盘中。缺点:丢失的数据比较多,优点:数据载入与恢复比较快。
AOF持久化通过保存Redis服务器所执行的写命令来记录数据库状态。缺点:载入比较慢。优点:适当设置参数,丢失数据少。
9.什么是Redis的事件?
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:
1.文件事件:Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件完成一系列网络通信操作。
a.Redis基于Reactor模式开发了文件事件处理器。
b.文件事件处理器使用I/O多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器。文件处理器以单线程方式运行,但通过I/O多路复用程序来监听多个套接字,既可以保证高性能网络通信,又可以与内部其它单线程模块对接。
2.时间事件:Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。
a.定时事件:让一段程序在指定的时间之后执行一次。
b.周期性事件:让一段程序每隔指定时间就执行一次。
10.Redis中serverCron函数的作用
serverCron函数是周期性时间事件,具有如下作用:
a.更新服务器的各类统计信息,比如时间、内存占用、数据库占用情况等。
b.清理数据库中的过期键值对。
c.关闭和清理连接失效的客户端。
d.尝试进行AOF或RDB持久化操作。
e.如果服务器是主服务器,那么对从服务器进行定期同步。
f.如果处于集群模式,对集群进行定期同步和连接测试。