Redis的優勢
效能高不僅跟執行緒模型有關,它有很多原因,主要有如下3點:
效能高低都是相對的,Redis是基於記憶體的資料庫,相對的我們拿傳統的基於磁碟的資料庫進行對比,如圖:
其中,Redis資料庫基於記憶體,分場景如下:
傳統磁碟資料庫,分場景如下:
以上可以看出:Redis是基於記憶體的資料庫,大多數操作在記憶體中完成,記憶體的IO效率比磁碟要高的多。因此,這是Redis效能高的一個原因。
Redis是單執行緒的,通常如果單執行緒處理效率不高,都開多執行緒處理,但是Redis這裡為什麼反到效率高了呢?
Redis的“I/ O 多路 復 用”是採用的效率最高的epoll模式,單執行緒卻實現了多客戶端接入,以及高IO利用率。如下圖:
資料結構的最佳化主要有以下兩點(篇幅有限,在這裡就不展開了):
Redis的優勢
效能高不僅跟執行緒模型有關,它有很多原因,主要有如下3點:
基於記憶體;單執行緒,但IO多路複用的利用率高;資料結構為高效能最佳化。下面分別闡述。Redis的優勢:基於記憶體效能高低都是相對的,Redis是基於記憶體的資料庫,相對的我們拿傳統的基於磁碟的資料庫進行對比,如圖:
其中,Redis資料庫基於記憶體,分場景如下:
資料查詢類場景:記憶體中有全量的資料,可以直接從記憶體中取得;資料寫入類場景:如果配置的是同步持久化,寫入記憶體的同時,也會寫入磁碟,效能有所降低,但是由於Redis使用的是IO多路複用,同時沒有執行緒競爭,因此IO利用率很高。資料寫入類場景:如果配置的是非同步持久化,寫入記憶體成功,即響應成功,不用等待磁碟的寫入,效能很高。傳統磁碟資料庫,分場景如下:
資料查詢類場景:從磁碟中索引資料,查詢並返回響應;資料寫入類場景:從將資料寫入磁碟,同時更新磁碟中的索引檔案。以上可以看出:Redis是基於記憶體的資料庫,大多數操作在記憶體中完成,記憶體的IO效率比磁碟要高的多。因此,這是Redis效能高的一個原因。
Redis的優勢:單執行緒,IO多路複用的IO利用率高Redis是單執行緒的,通常如果單執行緒處理效率不高,都開多執行緒處理,但是Redis這裡為什麼反到效率高了呢?
多執行緒存線上程競爭,且有鎖的問題,多執行緒程式碼邏輯複雜,複雜的邏輯通常帶來一定的效能損耗;Redis雖然是單執行緒,但是它的“I/ O 多路 復 用( multiplexing)”模型的IO利用率很高。Redis的“I/ O 多路 復 用”是採用的效率最高的epoll模式,單執行緒卻實現了多客戶端接入,以及高IO利用率。如下圖:
Redis的優勢:資料結構為高效能最佳化資料結構的最佳化主要有以下兩點(篇幅有限,在這裡就不展開了):