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、sorted set這些,這使得用戶方便了很多,畢竟封裝了一層實用的功能,同時實現了同樣的效果,當然用redis而慢慢捨棄mc。
內存和硬碟的關係,硬碟放置主體數據用於持久化存儲,而內存則是當前運行的那部分數據,CPU訪問內存而不是磁盤,這大大提升了運行的速度,當然這是基於程式的局部化存取原理。
推理到redis mysql,它是內存磁碟關係的一個映射,mysql放在磁碟,redis放在內存,這樣的話,web應用每次只訪問redis,如果沒有找到的數據,才去訪問Mysql。
然而redis mysql和記憶體 磁碟的用法最好是不同的。
更多Redis相關技術文章,請造訪Redis資料庫使用入門教學欄位學習!
以上是redis為什麼比mysql快的詳細內容。更多資訊請關注PHP中文網其他相關文章!