原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重。本文参照《Redis设计与实现》(黄健宏 著)
前言
Redis 是面试官考察的重点,因为它的确是生产上经常使用的技术。它的优点很多,其中有一点尤为重要,也是绕不开要提的,就是“快”!!
我想,稍微了解一点 Redis 的都知道它常用的五种数据类型:string,list,set,sorted set,hash。
再深一点的问,Redis 为什么是单线程的?又为什么快?底层存储?持久化策略?雪崩?击穿?并发?分布式?... 一套组合拳下来,有木有稍微触及到你的知识盲区?
考点太多啦,但这些都不是我要解释的,O(∩_∩)O哈哈~~。
想了解《Redis常见面试题》的同学,不要慌,请看我的另一篇博文:敬请期待
就Redis为什么快而言,绝不是一句“单线程+基于内存”就可以解释清楚的。我今天就想带大家摸一摸面试官的天花板,了解面试官究竟想要什么。
喜欢干货的同学,好好学习本篇就OK了。有兴趣研读原著的,我在百度云盘为大家分享了《Redis设计与实现》电子书(永久有效):
链接:https://pan.baidu.com/s/1GCSTZDVd4vpcyqbEMlpttQ
提取码:omcc
一、Redis为什么快?
单线程+基于内存?可以,没毛病,下面重点补充一些你可能不知道的。
Redis 是由 C 语言编写的,C 语言如此完善一定是有自己传统的字符串,但是 Redis 却弃之不用(并非完全不用,下面有解释),而是自己构建了一种名为简单动态字符串(simple dynamicstring,SDS)的抽象类型,并将 SDS 用作 Redis 的默认字符串使用。
- 当 Redis 需要的不仅仅是一个字符串字面量(string literal),而是一个可以被修改的字符串时,就会使用 SDS 来表示字符串的值;
- 而原本的 C 语言字符串只会作为字符串字面量,用在一些无须对字符串值进行修改的地方,比如,打印日志:redisLog(REDIS_WARNING,"Redis is so fast...")。