面试的时候,
面试官问,redis是单线程还是多线程
答:单线程
面试官再问,单线程,为什么还快呢?不应该是多线程才更快吗?那这是不是有什么矛盾啊?
答:啊???。。。。。。(心里卧槽,就是单线程所以快啊,还说多线程什么事,难道是我哪块的知识点出了问题了?)
对,这是一次真实的面试,没想到快被用烂的redis,竟然让人这样问住了,其实道理我知道,但一时突然语塞,真不知道怎么解释好,其实是一个坑。
以下是复盘的回答:
redis是单线程的,是因为redis是基于内存的,所以他的性能和cpu没有关系,而是和内存大小与带宽有关,所以既然和cpu没什么关系,那使用单线程就比多线程好多了,最明显的一点就是不用担心多线程的锁的问题了,而且如果觉得对于多核的c pu来说,单线程是不是有点让其他核闲置了,那么这其实就是另外一个问题了,我们完全可以起多个redis进程,比如4核就起4个redis进程,由于redis是key-value型数据库,数据之间不像关系型数据库那样有约束,只要客户端能分清哪些进程上存放哪些key就可以了。