Q1:

Redis为什么快

A1:

1、纯内存操作:Redis将所有数据放在内存中,内存相应时长大约是100ns,这是Redis的QPS过万的基础;
2、非阻塞的IO多路复用机制:Redis需要处理多个IO请求,同时把每个请求的结果返回给客户端,由于Redis是单线程模型,同一时间只能处理一个IO事件,于是redis需要在合适的时间暂停对某个IO事件的处理,转而去处理另一个IO事件,这就需要用到IO多路复用技术;
Redis和多路复用模型
image.png
image.png

3、单线程模型:
1.避免了多线程频繁的上下文切换带来的性能问题,对于服务端开发来说,锁和线程切换通常是性能杀手;
2.简化数据结构和算法实现,并发数据结构实现不但困难而且开发测试比较麻烦;

Q2:
Redis zset的实现原理(从跳跃表角度)

Q3:
描述Redis hash数据类型的rehash过程

Q4:
Redis的应用场景

Q5:
Redis分布式锁实现

Q6:
Redis6.0 网络IO多线程

Q7:
Redis 集群架构Codis与RedisCluster的区别

Q8:
描述RedisCluster节点扩容过程

Q9:
Redis list实现
A9:
1、Redis的list基于链表实现而非数组,这意味着list的插入和删除操作非常快,时间复杂度为O(1),但是索引定位很慢,时间复杂度为O(n);
2、如果再深入一点,你会发现Redis底层存储还不是一个简单的linkedlist,而是称为quicklist的一个数据结构,在列表元素较少的情况下会使用一块连续的内存空间存储,这个结构是ziplist,也即是压缩列表,当数据量比较多的情况时,才会改为quicklist,因为普通的链表需要附加指针空间太大,会比较浪费空间,而且会加重内存的碎片化,所以Redis将链表和ziplist结合起来组成了quicklist,也就是将多个ziplist使用双向指针串起来使用,这样既能满足快速的插入删除性能,又不会出现太大的空间冗余。

Q10:
描述Redis的COW机制
A10:


尊宝雷
15 声望0 粉丝