Redis
快速的開放原始碼記憶體內資料存放區,可做為資料庫、快取、訊息代理程式和佇列使用。
什麼是 Redis?
Redis 代表 Remote Dictionary Server,是快速的開放原始碼記憶體內鍵值資料存放區,可做為資料庫、快取、訊息代理程式和佇列使用。Redis 的原始開發人員 Salvatore Sanfilippo 嘗試提升其義大利新創公司的可擴展性時,專案便開始。現在,Redis 的回應時間低於一毫秒,可讓遊戲、廣告科技、金融服務、醫療保健和 IoT 等領域的即時應用程式每秒處理數百萬個請求。Redis 是用於快取、工作階段管理、遊戲、排行榜、即時分析、地理空間、叫車、聊天/簡訊、媒體串流和發佈/訂閱應用程式的熱門選項。
Redis 如何運作?
所有 Redis 資料都位於記憶體內,而資料庫的資料則存放在磁碟或 SSD 上。省去存取磁碟的麻煩,Redis 這類記憶體內資料存放區可避免搜尋時間延遲,還能在幾微秒的時間內存取資料。Redis 多樣化的資料結構、高可用性、地理空間、Lua 指令碼、交易、磁碟持久性和叢集支援功能,可讓您輕鬆建立即時的網際網路規模應用程式。
Redis 與 Memcached 的比較
Redis 和 MemCached 均為記憶體內開放原始碼資料存放區。Memcached 是一種高效能分散式記憶體快取服務,設計以簡單為主,而 Redis 則提供可有效運用在各種使用案例的豐富功能。如需詳細的功能比較,以幫助您做決定,請檢視 Redis 與 Memcached 的比較。 它們可與關聯式或關鍵值資料庫搭配使用來提升效能,例如,MySQL、Postgres、Aurora、Oracle、SQL Server、DynamoDB 等。
Redis 5.0 的新功能
Redis 5 和現在的 Redis 5.0.3 是開放原始碼 Redis 的最新 GA 版本。自 2009 年初始發佈以來,開放原始碼 Redis 已從快取技術演變為易於使用的快速記憶體內資料存放區,可提供多功能資料結構,且回應時間低於一毫秒。Redis 透過發佈 5.0 版達到主要里程碑,該版本包含各種進展和改進。與此有關的重大事件是引入 Streams,這是自 HyperLogLog 以來 Redis 中的首個全新資料結構。此版本還針對排序資料集新增了更多指令,以及適用於模組 API 的新功能。

具備加密、線上叢集大小調整、高可用性和合規等功能的全受管 Redis。
Redis 的優勢
記憶體內資料存放區
所有 Redis 資料都放在伺服器的主要記憶體內,與 PostgreSQL、Cassandra、MongoDB 和其他將大多數資料存放在磁碟或 SSD 的資料庫並不相同。使用傳統磁碟的資料庫需要在磁碟來回處理才能執行大多數的操作,而 Redis 這類記憶體內資料存放區則不受此限制。這樣它們便能夠支援更大規模的操作,而且回應時間更快。這項優勢提供超快速的效能,平均讀取和寫入操作時間低於一毫秒,並支援每秒百萬個操作。
彈性的資料結構
簡易的鍵值資料存放區提供的資料結構有限,而 Redis 則提供多樣化的資料結構以滿足應用程式的需要。Redis 資料類型包括:
- 字串 – 文字或二進位資料,最大 512 MB
- 清單 – 按新增順序排列的字串集合
- 資料集 – 未排序的字串集合,可與其他資料集類型交叉、合併和區分
- 排序資料集 – 依數值排列的資料集
- 雜湊 – 存放欄位和值清單的資料結構
- 點陣圖 – 提供位元層級操作的資料類型
- HyperLogLogs – 用來評估資料集獨特項目的概率資料結構
簡單易用
Redis 簡化程式碼,讓您只要撰寫幾行程式碼即可存放、存取和使用應用程式的資料。例如,如果應用程式資料以 hashmap 的形式存放,且您想要將該資料存放到資料存放區,只要使用 Redis 雜湊資料結構存放資料即可。如果在沒有雜湊資料結構的資料存放區進行類似的任務,則需要撰寫許多行的程式碼才能將格式轉換為另一種格式。Redis 隨附可操控和與資料互動的原生資料結構和許多選項。Redis 開發人員可使用超過一百種開放原始碼用戶端。支援的語言包含 Java、Python、PHP、C、C++、C#、JavaScript、Node.js、Ruby、R、Go 等等。
複寫和持續性
Redis 採用主要-複本架構,並支援非同步複寫,可將資料複寫到多部複本伺服器。這不但可提升讀取效能 (因為請求可分割到多部伺服器),還能在主伺服器發生故障時快速恢復。至於持久性,Redis 支援時間點備份 (將 Redis 資料集複製到磁碟)。
高可用性和可擴展性
Redis 在單一節點的主要或叢集拓撲提供主要-複本架構。這可讓您建立高度可用解決方案,以提供一致的效能和可靠性。需要調整叢集大小時,還可利用擴展和縮減或擴增等各種選項。這可讓您的叢集隨著需要擴展。
可擴展性
Redis 是開放原始碼專案,由充滿活力的社群所支援。由於 Redis 使用開放式標準、支援開放資料格式並含有豐富的用戶端,因此沒有廠商或技術鎖定的問題。
Redis 熱門使用案例
快取
Redis 是實作高可用性記憶體內快取的絕佳選項,可減少資料存取延遲、增加輸送量,以及減輕關聯式或 NoSQL 資料庫和應用程式的負載。Redis 可提供低於一毫秒的回應時間來服務頻繁要求的項目,且讓您能夠輕鬆地針對較高的負載進行擴展,無須擴充較為昂貴的後端。資料庫查詢結果快取、持久性工作階段快取、網頁快取,以及影像、檔案和中繼資料等快取常用物件都是 Redis 快取的常見範例。
聊天、簡訊和佇列
Redis 支援含模式比對功能的發佈/訂閱,以及清單、排序資料集和雜湊等各種資料結構。這讓 Redis 能夠支援高效能聊天室、即時註解串流、社交媒體饋送及伺服器互相通訊。Redis 清單資料結構可輕鬆實作輕量型的佇列。清單提供原子操作以及封鎖功能,因此適合用於需要可靠的訊息代理程式或循環清單的各種應用程式。
遊戲排行榜
對於想要建立即時排行榜的遊戲開發人員而言,Redis 是絕佳的選擇。只要使用 Redis 排序集資料結構,即可提供元素的唯一性,同時維護依使用者分數排序的清單。建立即時排名清單就和每次使用者分數變更時進行更新一樣簡單。您也可以透過利用時間戳記做為分數,使用排序集處理時間序列資料。
工作階段存放區
應用程式開發人員廣泛使用 Redis 做為高度可用且持久的記憶體內資料存放區,用以存放和管理網際網路規模應用程式的工作階段資料。Redis 提供管理使用者描述檔、登入資料、工作階段狀態和使用者專屬個人化等工作階段資料所需的低於一毫秒延遲、擴展和彈性。
豐富的媒體串流
Redis 提供快速的記憶體內資料存放區,以支援即時串流使用案例。Redis 可用於存放使用者描述檔的相關中繼資料,以及檢視數百萬個使用者的歷史記錄、身份驗證資訊/字符以及資訊清單檔案,以啟用 CDN 將影片一次串流到數百萬行動和桌面使用者。
地理空間:
Redis 提供專門打造的記憶體內資料結構和運算子,可大規模快速管理即時地理空間資料。利用 GEOADD、GEODIST、GEORADIUS 和 GEORADIUSBYMEMBER 等命令即時存放、處理和分析地理空間資料,讓 Redis 可輕鬆快速利用地理空間。您可以使用 Redis 新增以位置為基礎的功能,例如行車時間、行車距離,以及應用程式的興趣點。
Machine Learning
現代的資料驅動應用程式需要機器學習迅速處理大量、多樣化和快速的資料,並自動做出決策。像遊戲和金融服務的詐騙偵測、廣告技術的即時競標以及約會配對和共乘等使用案例,在數十毫秒內處理即時資料和做出決策的能力最為重要。Redis 提供快速的記憶體內資料存放區讓您迅速建立、訓練和部署機器學習模型。
即時分析
Redis 可與 Apache Kafka 和 Amazon Kinesis 等串流解決方案搭配使用做為記憶體內資料存放區,以低於一毫秒的延遲導入、處理和分析即時資料。Redis 非常適合用於即時分析使用案例,例如社交媒體分析、廣告目標、個人化和 IoT。