这个问题,在问到Redis方向的时候,经常会以当头炮的方式出现。
一般面试官说:“我们来聊聊Redis吧”,接下来就会问到:“能说下Redis为什么这么快吗”。
我听到最多的答案就是:“因为它是内存数据库,不用往硬盘上写,所以快啊。”
btw:这么说除了俗点儿,肯定也没毛病。
我听到最好玩儿的答案是:“因为它是单线程模型,不会涉及到锁机制,所以就快了。”
btw:艾玛,这个锅多线程不背,合着是线程越多就越慢呗。
下面我们就来详细分析一下,正在备战面试的同学也可以记一下,算是个蛮高频的问题。
“基于内存实现”这个原因就不详细展开了哈,毕竟地球人都懂的。
空间换时间 —— SDS数据结构
这里所说的空间为”内存空间“。
Redis是用C语言写的,但它的String数据类型,并没有直接用C语言中的char*字符数组字符串,而是通过简单动态字符串(Simple Dynamic String,SDS)的数据结构来实现的。
《Redis设计与实现》一书中,片段如下:
-
free属性的值为0,表示这个SDS没有分配任何未使用空间;
-
len 属性的值为 5,表示这个SDS保存了一个五字节长的字符串;
-
buf属性是char类型的字节数组,前五个字节保存了’y’、’i’、’k’、’u’、’n’,最后一个字节保存了空字符 ‘