1. 程式人生 > >Redis單線程架構以及工作方式

Redis單線程架構以及工作方式

原因 配置 sort div 一主多從 命令執行 讀取 特性 TE

一、單線程模型

  Redis客戶端對服務端的每次調用都經歷了發送命令,執行命令,返回結果三個過程。其中執行命令階段,由於Redis是單線程來處理命令的,所有每一條到達服務端的每一條到達服務端的命令都不會立刻執行,所有的命令都會進入一個隊列中,然後逐個執行。並且多個客戶端發送的命令的執行順序是不確定的。但是可以確定的是不會有兩條命令被同時執行,不會產生並發問題,這就是Redis的單線程基本模型。

二、單線程模型每秒萬級別處理能力的原因

  (1)純內存訪問。數據存放在內存中,內存的響應時間大約是100納秒,這是Redis每秒萬億級別訪問的重要基礎。

  (2)非阻塞I/O,Redis采用epoll做為I/O多路復用技術的實現,再加上Redis自身的事件處理模型將epoll中的連接,讀寫,關閉都轉換為了時間,不在I/O上浪費過多的時間。

  (3)單線程避免了線程切換和競態產生的消耗。

  (4)Redis采用單線程模型,每條命令執行如果占用大量時間,會造成其他線程阻塞,對於Redis這種高性能服務是致命的,所以Redis是面向高速執行的數據庫。

三、Redis工作方式分析

  Redis作為一個高性能的key-value數據庫具有以下特征:

  多樣的數據模型

  持久化

  主從同步

Redis支持豐富的數據類型,最為常用的數據類型主要由五種:String、Hash、List、Set和Sorted Set。Redis通常將數據存儲於內存中,或被配置為使用虛擬內存。Redis有一個很重要的特點就是它可以實現持久化數 據,通過兩種方式可以實現數據持久化:使用RDB快照的方式,將內存中的數據不斷寫入磁盤;或使用類似MySQL的AOF日誌方式,記錄每次更新的日誌。前者性能較高,但是可能會引起一定程度的數據丟失;後者相反。 Redis支持將數據同步到多臺從數據庫上,這種特性對提高讀取性能非常有益(Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。為了分擔讀壓力,Redis支持主從復制,Redis的主從結構可以采用一主多從或者級聯結構)。

Redis單線程架構以及工作方式