Redis將所有資料放在記憶體中,非資料同步正常工作中,是不需要從磁碟讀取資料的,0次IO。記憶體反應時間大約為100奈秒,這是Redis速度快的重要基礎。
mysql是持久化存儲,存放在磁碟裡面,檢索的話,會涉及到一定的IO,為了解決這個瓶頸,於是出現了緩存,比如現在用的最多的memcached (簡稱mc)。
首先,使用者存取mc,如果未命中,就去存取mysql,之後像記憶體和硬碟一樣,把資料複製到mc一部分redis和mc都是緩存,而且都是駐留在記憶體中運行的,這大大提升了高資料量web存取的存取速度。 (推薦學習:Redis影片教學)
然而mc只是提供了簡單的資料結構,例如string儲存;redis卻提供了大量的資料結構,例如string、list、set、hashset、sorted set這些,這使得用戶方便了很多,畢竟封裝了一層實用的功能,同時實現了同樣的效果,當然用redis而慢慢捨棄mc。
Redis是單執行緒。簡化演算法的實現,並發的資料結構實現不但困難且測試也麻煩。第二,單執行緒避免了執行緒切換以及加鎖釋放鎖帶來的消耗,對於服務端開發來說,鎖和執行緒切換通常是效能殺手。當然了,單線也會有它的缺點,也是Redis的惡夢:阻塞。如果執行一個指令太長,那麼會造成其他指令的阻塞,對於Redis是十分致命的,所以Redis是面向快速執行場景的資料庫。
Redis使用epoll作為I/O多路復用技術的實現,再加上Redis自身的事件處理模型將epoll的read、write、close等都轉換成事件,不在網路I/O上浪費過多的時間。實現對多個FD讀寫的監控,提高效能。
mysql用於持久化的儲存資料到硬碟,功能強大,但是速度較慢
redis用於儲存使用較為頻繁的資料到快取中,讀取速度快
更多Redis相關技術文章,請造訪Redis資料庫使用入門教學欄位學習!
以上是為什麼redis比mysql快的詳細內容。更多資訊請關注PHP中文網其他相關文章!