1. 程式人生 > 資料庫 >Redis第一篇:走進redis

Redis第一篇:走進redis

目錄

 


一、概述

  1. Redis之父:Salvatore Sanfilippo一名義大利程式設計師,大家更習慣稱呼他 Antirez。
  2. Redis即REmote Dictionary Server(遠端字典伺服器)。

  3. REmote Dictionary Server(Redis)是由Salvatore Sanfilippo寫的key-value儲存系統。
  4. 2008年,義大利一家創業公司退出一款基於Mysql的網站實時統計系統LLOOGG,而MySQL的效能不足以支援LLOOGG,Merzia公司創始人為LLOOGG量身定製了一個數據庫,即Redis。
  5. VMware公司從2010年開始贊助Redis的開發,Salvatore Sanfilippo和Pieter Noordhuis分別於同年加入VMware全職開發Redis。
  6. Redis是一個開源的使用ANSI C語言編寫、遵循BSD協議,支援網路、基於記憶體亦可持久化的日誌型、key-Value資料庫,並提供多種語言的API。
  7. 它通常被稱為資料結構伺服器,因為值(value)可以是 字串(String), 雜湊(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等型別。
  8. redis的程式碼託管於GitHub上,2015年Redis釋出了3.0.0的正式版。(開源)。

二、redis的特性

2.1、儲存結構

  1. 鍵值對的儲存形式,dict["key"]="value";dict為字典結構變數。“key”為鍵,“value"為值。
  2. redis以字典結構儲存資料,並允許其他應用通過TCP協議讀寫字典中的內容。
  3. Redis不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。

2.2、記憶體儲存與持久化

Redis資料庫中的所有資料都儲存在記憶體中,記憶體的讀寫速度遠快於硬碟,因此Redis在效能上對比其他基於硬碟儲存的資料庫有非常明顯的優勢。一臺普通膝上型電腦上,redis可以一秒讀寫超過100k個鍵值(key-value)

資料儲存在記憶體中的問題:程式退出後記憶體中的資料會丟失。redis的持久化功能能解決此問題。Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。

2.3、功能豐富

  • Redis提供資料開發、亦支援快取、佇列系統。
  • Redis可為每個鍵(key-value)設定生存時間(Time To Live,TTL)。生存時間可自動刪除。
  • 鍵的生存時間與redis的效能配合可作為快取系統來使用。
  • 作為快取系統,redis可限定資料佔用的最大記憶體空間,在資料到達空間限制後可以安照一定的規則自動淘汰不需要的鍵。
  • redis的列表型別鍵可以實現佇列並支援阻塞式讀取。

 

2.4、簡單穩定

  • redis的儲存結構簡單使得程式與redis的交換簡單。
  • 資料讀寫操作簡單。
  • c語言開發,程式碼量少。
  • 提供幾十種不同程式語言的客戶端庫。這些庫中封裝了redis的命令使得在程式中與redis進行交換變得更加容易。
  • redis是開源的,良好的開發氛圍和嚴謹的版本釋出使得redis的穩定版本非常可靠。

 

三、redis支援的鍵值資料型別

  1. 字串型別
  2. 雜湊型別
  3. 列表型別
  4. 集合型別
  5. 有序型別

四、為什麼使用redis

  1. 效能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  2. 豐富的資料型別 – Redis支援二進位制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作。
  3. 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。
  4. 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。

五、redis與其他key-value儲存有什麼不同

  • Redis複雜的資料結構並且提供對他們的原子性操作,這是一個不同於其他資料庫的進化路徑。Redis的資料型別都是基於基本資料結構的同時對程式設計師透明,無需進行額外的抽象。

  • Redis執行在記憶體中但是可以持久化到磁碟,所以在對不同資料集進行高速讀寫時需要權衡記憶體,因為資料量不能大於硬體記憶體。在記憶體資料庫方面的另一個優點是,相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。同時,在磁碟格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。