11.23 redis為什麼比mysql快

redis為什麼比mysql快

MySQL數據存儲是存儲在表中,查找數據時要先對錶進行全局掃描或者根據索引查找,這涉及到磁盤的查找,磁盤查找如果是按條點查找可能會快點,但是順序查找就比較慢;而Redis不用這麼麻煩,本身就是存儲在內存中,會根據數據在內存的位置直接取出。(Redis視頻教程)

Redis是基於內存存儲的,MySQL是基於磁盤存儲的

Redis存儲的是k-v格式的數據。時間複雜度是O(1),常數階,而MySQL引擎的底層實現是B+Tree,時間複雜度是O(logn),對數階。Redis會比MySQL快一點點。

Redis是單線程的多路複用IO,單線程避免了線程切換的開銷,而多路複用IO避免了IO等待的開銷,在多核處理器下提高處理器的使用效率可以對數據進行分區,然後每個處理器處理不同的數據。

首先,我們知道,mysql是持久化存儲,存放在磁盤裡面,檢索的話,會涉及到一定的IO,為了解決這個瓶頸,於是出現了緩存,比如現在用的最多的memcached(簡稱mc)。

首先,用戶訪問mc,如果未命中,就去訪問mysql,之後像內存和硬盤一樣,把數據複製到mc一部分。

redis和mc都是緩存,並且都是駐留在內存中運行的,這大大提升了高數據量web訪問的訪問速度。然而mc只是提供了簡單的數據結構。

比如string存儲;redis卻提供了大量的數據結構,比如string、list、set、hashset、sortedset這些,這使得用戶方便了好多,畢竟封裝了一層實用的功能,同時實現了同樣的效果,當然用redis而慢慢捨棄mc。

內存和硬盤的關係,硬盤放置主體數據用於持久化存儲,而內存則是當前運行的那部分數據,CPU訪問內存而不是磁盤,這大大提升了運行的速度,當然這是基於程序的局部化訪問原理。

推理到redis+mysql,它是內存+磁盤關係的一個映射,mysql放在磁盤,redis放在內存,這樣的話,web應用每次只訪問redis,如果沒有找到的數據,才去訪問Mysql。

然而redis+mysql和內存+磁盤的用法最好是不同的。

更多Redis相關技術文章,Redis數據庫使用入門教程欄目進行學習!

以上就是redis為什麼比mysql快的詳細內容,更多請關注其它相關文章!


分享到:


相關文章: