每次在问到朋友为什么redis的读取效率要远高于mysql,几乎回答的都是:因为redis是将数据存放在内存中,而mysql是将数据存放在硬盘里面的。
然后又问到:那为什么存放在内存里的数据比存放在硬盘里面的数据读取快呢?这原理又是什么呢?然后几乎都是一脸懵逼。
接着我又开始的度娘环节,了解了一下其中的原理了以后,大致归纳了一下。
首先需要知道的是,mysql的数据是存放在硬盘的磁盘中,当数据插入进去的时候,数据会存放到磁盘的一个磁道上面,当查询的时候,控制器会对磁盘发送一个指令,然后呢,磁盘就是开始查找数据了,那磁盘是如何查找数据呢?首先需要知道的是数据是任意的存放在磁盘的磁道上的,磁盘也不知道数据放在那里,所以只能用最原始的方式一个一个找,那他是如何找的呢?首先呢磁盘会转动起来,然后硬盘上有一个磁头,然后磁头就开始由内圈往外圈去一圈一圈的找,如果运气好,查找的数据在内圈磁道上,那消耗的时间就很少了,要是在最外圈,那只能说额头黑,非酋了。既然说到这个硬盘的读取效率,那就要顺便说一下他的转速了,不同的硬盘价格也不一样,其中影响硬盘价格的有他的大小,还有他的转速,那什么是转速呢?那就以7200转为例,7200转的含义就是硬盘里面的磁盘在一分钟内能转7200圈,想象一下,一个一分钟转4800圈的和一个一分钟7200圈的,从效率上来说肯定就是7200转的快了,因此买硬盘看到那些转速快的,大小都是一样的硬盘不要看到价格比较高会觉得纳闷,因为他不但会旋转还转的快。
接下来说一下内存了,一台电脑最核心的就是CPU了,他是计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU通过前端总线和北桥相连,(在这就不说南桥了),那北桥的作用是什么呢?它主要负责CPU与内存之间的数据交换,并控制AGP、PCI数据在其内部的传输,是主板性能的主要决定因素。所以可以看成 CPU 通过前端总线 和北桥交互,北桥和CPU控制着内存。前面也说了,由于硬盘读取东西太麻烦了,而且还慢,因为CPU的工作运转效率太快了,硬盘这个吊车尾赶不上速度啊,所以中间加了一个内存。所以内存在中间的作用:1. 保存从硬盘读取的数据,提供给CPU使用 2. 保存CPU的一些临时执行结果,以便CPU下次使用或保存到硬盘。因此内存基本是就在CPU和硬盘中间了,如果硬盘的转速足够的快,他的读取效率跟得上CPU的节奏,那压根就没有内存什么事了。
有点说远了,在说到redis,redis他是将数据放在内存中,当查询指令一发出的时候,CPU通过前端总线到北桥,然后在一起作用到内存直接在内存中找数据就行了,而mysql查询呢,还要通过内存在到硬盘,然后加上硬盘找的又慢,因此mysql的读取效率就远低于redis了