redis是非關聯式記憶體資料庫 資料儲存於記憶體中,記憶體讀取速度非常快,如果只是簡單的 key-value,記憶體不是瓶頸。 一般情況下,hash 尋找可以達到每秒數百萬次的數量級。 (建議學習:Redis影片教學)
採用單線程,避免了不必要的上下文切換和競爭條件
##內部實作採用epoll ,採用了epoll 自己實作的簡單的事件框架。 epoll中的讀、寫、關閉、連接都轉換成了事件,然後利用epoll的多路復用特性,絕不在io上浪費一點時間因為Redis的操作都非常快速— —它的資料全部在記憶體裡,完全不需要存取磁碟。 至於並發,Redis 使用多路 I/O 復用技術,本身的並發效率不成問題。
當然,單一 Redis 進程沒辦法使用多核心(任一時刻只能跑在一個 CPU 核心上),但是它本來就不是非常計算密集型的服務。如果單核心效能不夠用,可以多開幾個進程。Redis採用了單執行緒的模型,保證了每個操作的原子性,也減少了執行緒的上下文切換和競爭。
另外,資料結構也幫了不少忙,Redis全程使用hash結構,讀取速度快,還有一些特殊的資料結構,對資料儲存進行了最佳化,如壓縮表,對短資料進行壓縮存儲,再如,跳表,使用有序的資料結構加快讀取的速度。還有一點,Redis採用自己實作的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。
string 類型,二進位安全的hash 類型,是一個鍵值對的集合List清單底層是個鍊錶#set 集合無需的透過hashtale實作zset sort set 有序集合更多Redis相關技術文章,請造訪Redis資料庫使用入門教學欄位學習!
以上是redis為什麼效能好的詳細內容。更多資訊請關注PHP中文網其他相關文章!