Redis 高频面试题:10w+QPS 的 Redis 真的只是因为单线程和基于内存?
你以为 Redis 这么快仅仅因为单线程和基于内存? 那么你想得太少了,我个人认为 Redis 的快是基于多方面的:不但是单线程和内存,还有底层的数据结构设计,网络通信的设计,主从、哨兵和集群等等方面的设计~ 下面,我将 360° 为你揭开 Redis QPS达到10万/秒的神秘面纱。 一、底层数据结构设计 1、底层架构: 首先值得称赞的第一点:Redis 底层使用的数据结构很多,但是却没有直接使用这些数据结构来实现键值对数据库,而是基于数据结构创建了一个对象(redisObject)系统。(是不是觉得有点面向对象编程的意思 ~) 对象系统里面包括了字符串对象,列表对象,哈希对象、集合对象和有序集合对象。 使用对象的好处: Redis 在执行命令之前,可以根据对象的类型判断这个对象是否可以执行给定的命令。 可以针对不同的使用场景,为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率。 一个对象怎么设置不同的数据结构实现? 在讲解前,我们必须要了解 Redis 对象的结构。 它三个重要的部分:type 属性、encoding 属性,和 ptr 属性。 我们用字符串对象为例: 我们都知道,Redis 的 SET 命令其实是针对字符串的,但是它也可以设置数值。那底层是怎么做的呢? 它会将 String 对象的 encoding 属性标识为 REDIS_ENCODING