很多人都在问这个问题,网上也有很多回答,但我觉得说的都不够好,我说说自己的看法。
首先,程序员喜欢讨论“快”,快,究竟有多块?
redis官方数据大概说是5w/s,但这种beanchmark测试应该是没用到多种数据结构的,和商业生产环境不一样。
大家认为多线程就应该快,单线程就应该没那么快,redis居然单线程还能支持那么高并发,所以快。
问题来了,多线程的优缺点是啥?
优点:
最大利用cpu
缺点:
1.线程之间的切换是有代价的
2.线程之间锁竞争
3.多线程让系统复杂度大大提升
那么,redis究竟是不是cpu密集型呢?那肯定不是的,只有大量运算、hash等才是cpu密集型,redis是一个内存数据库,不是cpu密集型的。
多线程万一弄了个bug,结果未必是使用者能承受的,因为它的持久化无论aof,rdb都是不安全的,都有丢数据的风险,这点与mysql这种db不一样,安全性没mysql高。
所以,多方面考虑redis作者才采用单线程开发redis。里面的数据结构也是用的很好,数据量小时用压缩列表,现在的机器在纯操作内存就是能支持那么高的并发。