Redis第一篇:走進redis
阿新 • • 發佈:2020-12-19
目錄
一、概述
- Redis之父:Salvatore Sanfilippo一名義大利程式設計師,大家更習慣稱呼他 Antirez。
-
Redis即REmote Dictionary Server(遠端字典伺服器)。
- REmote Dictionary Server(Redis)是由Salvatore Sanfilippo寫的key-value儲存系統。
- 2008年,義大利一家創業公司退出一款基於Mysql的網站實時統計系統LLOOGG,而MySQL的效能不足以支援LLOOGG,Merzia公司創始人為LLOOGG量身定製了一個數據庫,即Redis。
- VMware公司從2010年開始贊助Redis的開發,Salvatore Sanfilippo和Pieter Noordhuis分別於同年加入VMware全職開發Redis。
- Redis是一個開源的使用ANSI C語言編寫、遵循BSD協議,支援網路、基於記憶體亦可持久化的日誌型、key-Value資料庫,並提供多種語言的API。
- 它通常被稱為資料結構伺服器,因為值(value)可以是 字串(String), 雜湊(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等型別。
- redis的程式碼託管於GitHub上,2015年Redis釋出了3.0.0的正式版。(開源)。
二、redis的特性
2.1、儲存結構
- 鍵值對的儲存形式,dict["key"]="value";dict為字典結構變數。“key”為鍵,“value"為值。
- redis以字典結構儲存資料,並允許其他應用通過TCP協議讀寫字典中的內容。
- 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支援的鍵值資料型別
- 字串型別
- 雜湊型別
- 列表型別
- 集合型別
- 有序型別
四、為什麼使用redis
- 效能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的資料型別 – Redis支援二進位制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。
- 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。
五、redis與其他key-value儲存有什麼不同
-
Redis複雜的資料結構並且提供對他們的原子性操作,這是一個不同於其他資料庫的進化路徑。Redis的資料型別都是基於基本資料結構的同時對程式設計師透明,無需進行額外的抽象。
-
Redis執行在記憶體中但是可以持久化到磁碟,所以在對不同資料集進行高速讀寫時需要權衡記憶體,因為資料量不能大於硬體記憶體。在記憶體資料庫方面的另一個優點是,相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。同時,在磁碟格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。