说起当前主流NoSql数据库非 Redis
莫属。因为它读写速度极快,一般用于缓存热点数据加快查询速度,大家在工作里面也肯定和 Redis
打过交道,但是对于Redis
为什么快,除了对八股文的背诵,好像都还没特别深入的了解。
今天我们一起深入的了解下redis吧:
高效的数据结构
Redis 的底层数据结构一共有6种,分别是,简单动态字符串,双向链表,压缩列表,哈希表,跳表和整数数组,它们和数据类型的对应关系如下图所示:
本文暂时按下不表,后续会针对以上所有数据结构进行源码级深入分析
单线程vs多线程
Talk is cheap,Show me the code
如下代码演示了串行和并发执行并累加操作的时间:
硬盘数据库读取流程
内存数据库读取流程
IO多路复用是最常使用的IO模型,但是其异步程度还不够“彻底”,因为它使用了会阻塞线程的select系统调用。因此IO多路复用只能称为异步阻塞IO,而非真正的异步IO。
异步IO模型
“真正”的异步IO需要操作系统更强的支持。如下展示了异步 IO 模型的运行流程(Proactor设计模式):
用户进程发起read操作之后,立刻就可以开始去做其他的事;而另一方面,从内核的角度,当它收到一个异步的read请求操作之后,首先会立刻返回,所以不会对用户进程产生任何阻塞。
可以看出来啊,Redis号称十万吞吐量确实也没吹牛,以后大家面试的时候也可以假装不经意间提一嘴这个数量级,发现很多人对“十万级“、”百万级“这种量级经常乱用,能够比较精准的说出来也是一个加分项呢。