• 欢迎光临~

redis面试题

开发技术 开发技术 2022-09-30 次浏览

一、线程

1.1、redis是单线程还是多线程

Redis 6.0版本以前的单线程是指其网络I/O和键值对读写是由一个线程完成的
Redis 6.0引入的多线程指的是网络请求过程采用了多线程,而键值对读写命令仍然是单线程处理的,命令到服务端去执行还是排队的顺序执行的,所以Redis仍然是并发安全的,因为命令还是一个个去执行
也就是只有网络请求模块和数据操作模块是单线程的,而其他的持久化、集群数据同步等,其实是由额外的线程执行的

redis面试题

1.2、redis是单线程为什么还能这么快

1、命令执行基于内存操作,一条命令在内存里操作的时间是几十纳秒
2、命令执行是单线程操作,没有线程切换开销
3、基于IQ多路复用机制提升Redis的I/O利用率
4、高效的数据存储结构:全局hash表以及多种高效数据结构,比如:跳表,压缩列表,链表等等

1.3、redis是单线程的,如何做到支持高并发?

IO多路服用,是网络请求过程采用了多线程

二、key相关

2.1、redis是怎么删除过期的key的?

3种:

①、定时删除

定时删除是在设置 key 的过期时间的同时,会创建一个定时器(timer)。定时器在 key 的过期时间来临时,立即执行对 key 的删除操作

②、定期删除

定期删除是每隔一段时间,程序就会对 Redis 数据进行一次检查,删除里面的过期 key,至于要删除多少过期 key,以及要检查多少个 db,则是由 Redis 内部算法决定

③、惰性删除

惰性删除是定时删除和定期删除的折中处理方案。它放任 key 过期不管,但是每次获取 key 时,都会检查取得的 key 是否过期,如果过期,则删除该 key;若没有过期,就返回该 key 的值

2.2、Redis key 的过期时间和永久有效分别怎么设置?

设置过期时间

expire key second:设置key的过期时间

redis面试题 

设置永久有效

redis 127.0.0.1:6379> PERSIST KEY_NAME Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。

2.3、一个Redis实例最多能存放多少的keys?List、Set、Sorted Set 他们最多能存放多少元素?

2.4、redis大key如何解决,如何优雅的删除?

2.5、redis Key过期了为什么内存没有释放?

可能性有两种:

1、一开始对key设置了过期时间,但是后面又修改了key的值,只是单纯的使用了SET命令,没有加上过期时间的参数

redis面试题

 

2、由于是定时删除机制,可能正处于删除的过程中,未全部清理完成

Redis对于过期key的处理一般有惰性删除和定时删除两种策略

1、惰性删除:当读/写一个已经过期的key时,会触发惰性删除策略,判断key是否过期,如果过期了直接删除掉这个key

2、定时删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期(默认每100ms)主动淘汰一批已过期的key,这里的一批只是部分过期key,所以可能会出现部分key已经过期但还没有被清理掉的情况,导致内存并没有被释放

2.6、Redis Key没有设置过期时间为什么被Redis删除了

2.7、Redis淘汰key的算法?

2.8、删除key的命令会阻塞redis吗?

三、缓存

1、遇到过缓存击穿吗?描述一下

2、遇到过缓存穿透吗?描述一下

3、如何避免缓存雪崩?

4、缓存如何回收的?

四、Redis集群三种方式

4.1、主从模式

redis面试题

4.2、哨兵模式

redis面试题

在主从集群之外添加3个哨兵节点组成哨兵集群,对每个Redis节点进行监听,Client通过哨兵节点访问Redis节点,如果有主节点宕机了,哨兵节点会从从节点里面选一个新的节点作为主节点,也因此会出现瞬断的情况

4.3、高可用集群模式

redis面试题

redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵·也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单

 

程序员灯塔
转载请注明原文链接:redis面试题
喜欢 (0)