Q1:
Redis为什么快
A1:
1、纯内存操作:Redis将所有数据放在内存中,内存相应时长大约是100ns,这是Redis的QPS过万的基础;
2、非阻塞的IO多路复用机制:Redis需要处理多个IO请求,同时把每个请求的结果返回给客户端,由于Redis是单线程模型,同一时间只能处理一个IO事件,于是redis需要在合适的时间暂停对某个IO事件的处理,转而去处理另一个IO事件,这就需要用到IO多路复用技术;
Redis和多路复用模型
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:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。