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的優點:數據結構爲高性能優化
數據結構的優化主要有如下兩點(篇幅有限,在這裏就不展開了):3d
- Redis全程採用了Hash結構,所以存取效率很是高;
- 對於數據的存儲內容也進行了壓縮,節省了空間佔用,也減小了io帶寬。
來源:悟空問答blog