redis 學與思系列(4)

前言

本篇文章主要結合本身的理解重點解答如下幾個問題:redis

  • 單線程的 Redis 爲何這麼快?
  • Pipeline有什麼好處,爲何要用pipeline?

這些問題都和redis 內部是如何執行命令有關。數據庫

redis 內部命令的執行方式

咱們知道redis採用的是單線程和I/O多路複用模型來實現高性能的內存數據庫服務的。
複製代碼

如圖,執行每一條命令的時候,都會通過如下幾個過程:網絡

  • 發送命令
  • 執行命令
  • 返回結果
    若是是同時發送多條命令時,這些命令都會進入一個隊列中,而後逐步被執行。

一. 單線程的 Redis 爲何這麼快?

> 純內存訪問,redis 的全部數據都放在內存中,在內存中執行相應的指令響應很是快;
 > 非阻塞I/O,redis採用epoll做爲IO 多路複用技術的實現,在加上redis自身的事件模型,減小了網絡I/O消耗時間
 > 單線程架構:避免線程切換和競態產生的消耗。
 > Redis 內部使用hash結構,讀取速度快,還有一些特殊的數據結構,對數據存儲進行了優化,如壓縮表,對短數據進行壓縮存儲,再如,跳錶,使用有序的數據結構加快讀取的速度。
複製代碼

二. Pipeline有什麼好處,爲何要用pipeline?

咱們知道每發送一條redis命令,都會通過(1)發送命令,(2)命令排隊,(3)執行命令和(4)返回結果這幾步,若是將這(1)(4)步的消耗時間稱爲一個RRT(往返時間),採用pipeline 能夠極大的減小RRT, 由於採用pipeline 是將多條命令同時發送到服務端,以及多條命令的響應結果同時發送到客戶端,這樣採用批量的操做方式能夠極大的減小這2部分的時間.數據結構

好比若是有n條命令,若是一條條發送,那麼就須要n次RRT, 若是採用pipiline機制的話就只須要1次RRT架構

固然redis 提供了部分批量操做命令也能實現相同的效果
複製代碼

三.小結

本文結合本身的理解簡單的解答了一下上面的2個問題,下篇文章主要談談redis持久化機制相關的問題。性能

相關文章
相關標籤/搜索