起源
2008年,意大利一家創業公司Merzia的創始人Salvatore Sanfilippo為了避免MySQL的低性能,親自定做一個資料庫,并于2009年開發完成了Redis的最初版本。
Salvatore Sanfilippo自己也沒有想到,短短的幾年時間,Redis就擁有了龐大的使用者群體。Hacker News在2012年釋出了一份資料庫的使用情況調查,結果顯示有近12%的公司在使用Redis。國内如新浪微網誌、街旁和知乎,國外如GitHub、Stack Overflow、Flickr、暴雪和Instagram,都是Redis的使用者。
特性
redis是一個開源的使用ANSI C語言編寫、支援網絡、可基于記憶體亦可持久化的日志型、Key-Value資料庫。它具有以下特性:
-
速度快,性能高
Redis的資料的資料的操作是在記憶體裡完成的,同時再配合上高效的網絡IO模型。單台每秒能處理大約10萬次的QPS。
-
豐富的資料結構
redis支援string,list,hash, set, sortedset等不同的資料類型。
-
多語言支援
redis為用戶端提供了一個簡單的通信協定,現在主流的開發語言都提供了相應的client庫,包括java,c++,python,ruby,php等。
-
持久化
redis支援資料的持久化,可以将記憶體中的資料儲存在磁盤中,重新開機的時候可以再次加載進行使用。
-
高可用,分布式
為應對海量資料存儲的要求, redis提供了對高可用與分布式應用的支援,包括複制,cluster等。
典型使用場景
- 緩存系統 如圖所示是一個典型的緩存系統,App Server 總是先通路緩存中的資料,如果不存在再從後端資料庫中通路。
- 計數器 如圖所示是微網誌朋友圈,其點贊數就是電腦很好的例子。利用redis的原子自增指令incr可以實作計數器的功能。
- 消息隊列系統 消息隊列在日常開發中使用頻率很高,Redis也提供了基于記憶體的消息隊列。當對消息可靠性要求不高時,可以使用Redis來作為消息隊列。
- 排行榜 如圖所示是微網誌朋友圈人氣排行榜,利用redis的sortedset有序的特點,以點贊數來作為排序的參考就可以實作上述功能。
- 實時系統 如圖所示是一個實時垃圾郵件過濾郵件系統,使用redis建構一個BloomFilter可以輕松實作這樣的系統。