? ?每次在問到朋友為什么redis的讀取效率要遠高于mysql,幾乎回答的都是:因為redis是將數(shù)據(jù)存放在內(nèi)存中,而mysql是將數(shù)據(jù)存放在硬盤里面的。
然后又問到:那為什么存放在內(nèi)存里的數(shù)據(jù)比存放在硬盤里面的數(shù)據(jù)讀取快呢?這原理又是什么呢?然后幾乎都是一臉懵逼。
接著我又開始的度娘環(huán)節(jié),了解了一下其中的原理了以后,大致歸納了一下。
? 首先需要知道的是,mysql的數(shù)據(jù)是存放在硬盤的磁盤中,當數(shù)據(jù)插入進去的時候,數(shù)據(jù)會存放到磁盤的一個磁道上面,當查詢的時候,控制器會對磁盤發(fā)送一個指令,然后呢,磁盤就是開始查找數(shù)據(jù)了,那磁盤是如何查找數(shù)據(jù)呢?首先需要知道的是數(shù)據(jù)是任意的存放在磁盤的磁道上的,磁盤也不知道數(shù)據(jù)放在那里,所以只能用最原始的方式一個一個找,那他是如何找的呢?首先呢磁盤會轉(zhuǎn)動起來,然后硬盤上有一個磁頭,然后磁頭就開始由內(nèi)圈往外圈去一圈一圈的找,如果運氣好,查找的數(shù)據(jù)在內(nèi)圈磁道上,那消耗的時間就很少了,要是在最外圈,那只能說額頭黑,非酋了。既然說到這個硬盤的讀取效率,那就要順便說一下他的轉(zhuǎn)速了,不同的硬盤價格也不一樣,其中影響硬盤價格的有他的大小,還有他的轉(zhuǎn)速,那什么是轉(zhuǎn)速呢?那就以7200轉(zhuǎn)為例,7200轉(zhuǎn)的含義就是硬盤里面的磁盤在一分鐘內(nèi)能轉(zhuǎn)7200圈,想象一下,一個一分鐘轉(zhuǎn)4800圈的和一個一分鐘7200圈的,從效率上來說肯定就是7200轉(zhuǎn)的快了,因此買硬盤看到那些轉(zhuǎn)速快的,大小都是一樣的硬盤不要看到價格比較高會覺得納悶,因為他不但會旋轉(zhuǎn)還轉(zhuǎn)的快。
接下來說一下內(nèi)存了,一臺電腦最核心的就是CPU了,他是計算機系統(tǒng)的運算和控制核心,是信息處理、程序運行的最終執(zhí)行單元。CPU通過前端總線和北橋相連,(在這就不說南橋了),那北橋的作用是什么呢?它主要負責CPU與內(nèi)存之間的數(shù)據(jù)交換,并控制AGP、PCI數(shù)據(jù)在其內(nèi)部的傳輸,是主板性能的主要決定因素。所以可以看成 CPU 通過前端總線 和北橋交互,北橋和CPU控制著內(nèi)存。前面也說了,由于硬盤讀取東西太麻煩了,而且還慢,因為CPU的工作運轉(zhuǎn)效率太快了,硬盤這個吊車尾趕不上速度啊,所以中間加了一個內(nèi)存。所以內(nèi)存在中間的作用:1. 保存從硬盤讀取的數(shù)據(jù),提供給CPU使用 2. 保存CPU的一些臨時執(zhí)行結(jié)果,以便CPU下次使用或保存到硬盤。因此內(nèi)存基本是就在CPU和硬盤中間了,如果硬盤的轉(zhuǎn)速足夠的快,他的讀取效率跟得上CPU的節(jié)奏,那壓根就沒有內(nèi)存什么事了。
有點說遠了,在說到redis,redis他是將數(shù)據(jù)放在內(nèi)存中,當查詢指令一發(fā)出的時候,CPU通過前端總線到北橋,然后在一起作用到內(nèi)存直接在內(nèi)存中找數(shù)據(jù)就行了,而mysql查詢呢,還要通過內(nèi)存在到硬盤,然后加上硬盤找的又慢,因此mysql的讀取效率就遠低于redis了