企業級Redis開發運維從入門到實踐 (1)—Redis 初識

迷途碼界發表於2018-09-13

Redis是什麼

Redis是一個開源基於鍵值的儲存服務系統,具有多種資料結構,同時具有高效能、功能豐富(即高效能Key-Value、多種資料結構、豐富的功能、高可用分散式支援的資料儲存服務)的特性。

Redis使用公司

下面等公司都在使用Redis
這裡寫圖片描述

Redis的特性

八大特性:速度快、持久化、 多種資料結構、支援多種變成語言、功能豐富、簡單、主從複製、高可用與分散式。

速度快

10w OPS,即每秒10w的讀寫(官方提供),該特性的原因

  • 資料儲存於記憶體中
  • C語言(50000 line實現,單機核心程式碼在23000 line,其他的是分散式部分)
  • 單執行緒模型
    這裡寫圖片描述

記憶體、SSD硬碟、機械硬碟的快速讀寫的效率對比
這裡寫圖片描述

持久化(當機不丟資料)

Redis所有資料保持在記憶體中,對資料的更新將非同步地儲存到磁碟上。提供了RDBAOF兩種方式做資料持久化。

Key-Value資料結構

Redis提供了五種主要資料結構

  • 字串(String)
  • 雜湊(Hash Tables (objects!))
  • 列表(Linked Lists)
  • 集合(Sets)
  • 有序集合(Sorted Sets)

新版本增加的資料型別

  • 點陣圖(Bitmaps):使用很小的記憶體實現高效的儲存,例如布隆過濾器可以使用Bitmaps實現,本質還是字串
  • 超小記憶體唯一計數(HyperLogLog):只用12k的存量儲存一個唯一值計數,計數不一定準確有一定的誤差率,本質還是字串
  • 地圖資訊位(GEO):Redis3.2提供的一個地理資訊定位的資料型別,可以計算經度和緯度。

Key-Value

支援多種客戶端語言

不僅支援以下語言,還支援其他的語言。
支援多種客戶端語言

功能豐富

Redis提供了多種豐富的功能

  • 釋出訂閱
  • 事務
  • Lua指令碼
  • pipeline
簡單

Redis簡單在於單機核心程式碼量大約23000行C編寫而成,方便開發者對日誌的分析或者開發者根據自己的業務需求進行修改來實現業務的定製化。

:但是Redis的首要是任務是開發和運維,在有大量經驗後帶著問題去看原始碼來解決問題。

Redis簡單的其他原因

  • 不依賴外部庫(like libevent)
  • 單執行緒模型:不論是服務端還是客戶端開發都將相對容易些。
主從複製

在Redis中有兩種角色:主伺服器、從伺服器。
主伺服器的資料可以同步到從伺服器上,這樣可以為高可用和分散式提供很好的基礎。
主從複製是Redis開發和運維的痛點之一。
這裡寫圖片描述

高可用、分散式

Redis單點和主從複製模型對於實現一個高可用資料庫來說是比較難甚至無法實現的,所以Redis從2.8版本中提供了**Redis-Sentinel(v2.8)**支援高可用。

其次對於一個具有儲存功能的服務來講,他的分散式功能對於當下的市場來說是非常重要的,所以Redis從3.0版中正式提供了**Redis-Cluster(v3.0)**支援分散式。

Redis典型應用場景

  • 快取系統:使用者請求App Server,基於高併發處理App Server首先向Cache(Redis)中查詢資料,如果Cache(Redis)中存在資料將資料返回App Server;如果Cache(Redis)不存在將去Storage儲存層(MySQL、Oracle、PostgreSql等)查詢資料,將資料返回App Server,於此同時存入Cache(Redis)中以提供高可用。
    這裡寫圖片描述
  • 計數器:微博的轉發數和評論數都是可以使用計數器實,Redis的INCR key可以執行遞增操作來實現計數。
  • 訊息佇列系統:在訊息佇列要求不是很強的時候可以使用Redis的釋出訂閱模式作簡單的中介軟體使用。
    這裡寫圖片描述
  • 排行榜:Redis提供的有序集合在實現排行榜功能是非常簡單的。
  • 社交網路:社交網路的粉絲數、關注數、共同關注等功能均可用Redis來實現。
  • 實時系統:垃圾郵件處理系統,訊息佇列緩衝系統。

相關文章