Home >> Blog >> 什麼是 Redis™?概述

什麼是 Redis™?概述

什麼是 Redis™?概述

內存資料庫或數據結構伺服器

Redis 是一個快速的內存資料庫和緩存,在 BSD 許可下開源,用 C 語言編寫並針對速度進行了優化。Redis 的名字來源於“ RE mote DI ctionary Server ”。

Redis 通常被稱為數據結構伺服器,因為它的核心數據類型類似於字符串、列表、字典(或hash)、集合和排序集合等編寫程式語言中的數據類型。它還為近似計數、地理定位和流處理提供了許多其他數據結構和功能。

在 NoSQL 資料庫中,Redis 的各種數據結構使其最接近程式設計師最常在應用程式和算法中使用的原生數據結構。這種易用性使其成為快速開發和快速應用程式的理想選擇,因為核心數據結構很容易在進程和服務之間共享。

默認情況下,Redis 將數據存儲在內存中,默認情況下具有周期性硬碟持久性。由於 Redis 將數據持久化到硬碟,因此它可以用作許多用例的經典資料庫以及緩存。滿時,Redis 將向客戶端返回錯誤,但它可以配置為緩存,以在新數據進入時彈出較舊的和不太重要的數據。在這兩種情況下,可用內存的大小是其使用的主要限制。

Redis 主要用於什麼?

智能緩存

Redis通常用作緩存,將經常訪問的數據存儲在內存中,以便應用程式可以響應用戶。Redis 能夠指定您希望保留數據多長時間以及首先驅逐哪些數據,從而啟用了一系列智能緩存模式。

智能緩存有很多原因,它對用戶體驗、用戶生產力、跳出率和零售收入有很大影響。關於這些影響的研究彙編在我們關於內存資料庫優勢的白皮書中。

數據過期和驅逐政策

數據過期和驅逐政策

在某些用例中,最近最少使用 (LRU) 或最不常用 (LFU) 指標對驅逐更有意義。Redis 還提供了這些緩存策略選項的可調概率實現。

Redis 的其他用途和特點是什麼?

Redis 的內存架構是一個鍵空間,其鍵擁有任意內存對象。Redis 的多功能架構使其能夠發展以添加映射到此模型的額外功能。

流stream和流處理

Redis 通過其列表和發布/訂閱消息(如下)創建了一個出色的任務隊列和消息代理。在 Redis 5.0 版本中,受 Apache Kafka 項目啟發的流和流處理被添加到其功能集中。以與 Kafka 主題類似的方式,工作流可以具有處理“消費者”組,這些“消費者”組檢查工作並在工作完成時確認。如果在一段時間後沒有收到確認,那麼其他消費者可以接手這項工作以確保它完成。

這可以在內存中啟用類似 Kafka 的模式,並且對於響應式非阻塞用戶界面體驗特別有用。

發布和訂閱消息 (Pub/Sub)

Pub/Sub 消息傳遞允許將消息傳遞到通道,並允許該通道的所有訂閱者接收該消息。此功能使信息能夠在您的基礎架構中快速流動,而不會因為未存儲消息而佔用資料庫中的空間。因此,您可以讓服務了解其他基礎設施或應用程式的負載,或者更新遊戲分數和傳遞通知。

Lua 腳本

Redis 有一個腳本工具,可以使用 Lua 語言編寫和執行自定義腳本。這允許用戶以快速執行腳本的形式向 Redis 自己添加功能。Lua 具有極快的初始化速度,使腳本能夠對數據執行各種任務,而不會顯著減慢 Redis 的速度。由於核心 Redis 進程是單線程的,這確保了原子操作。

地理空間特徵

Redis 提供了一系列地理空間索引數據結構和命令。存儲緯度和經度坐標,用戶可以查詢對象之間的距離或查詢給定點半徑內的對象。這些命令能夠以各種格式(英尺、公里等)返回它們的值。

Redis 的速度可以讓這些數據點快速更新。在拼車應用程式中,這些功能可用於將用戶與附近的司機聯繫起來,然後在他們接近或在乘車過程中提供實時更新。Redis 正與主要的運輸和交付公司一起用於這個用例。

超級日誌

與保持完整的唯一項目集相比,hyperloglog 數據結構可以在更小的空間內進行近似集計數。一個簡單的計數器可以重複計數,一組用戶 ID 或 IP 會佔用大量空間。hyperloglog 允許非常少量的內存來保存唯一對象的良好近似值。

位圖

位圖允許在 Redis 字符串中高效地將 True 和 False 值存儲為 1 或 0。通過允許有效地存儲這種類型的布爾數據,許多用例都是可能的。

位圖可用於有效地存儲用戶通過某些內容的進度,例如在線課程或大型下載。另一種用途是在應用程式中表示某人的聯繫人的在線/離線狀態。

企業成熟度

Redis 的創建者 Salvatore Sanfilippo 或 Antirez 最初為一家初創公司在數百行 TCL中起草了一個內存數據存儲。2009年,他發布了向開源社區

從那以後的十年裡,Redis 經歷了多年的開發和測試以及在企業中的實際使用,為世界上最大的公司和服務處理了數万億筆交易。Redis 6.0 包括節點之間的 SSL/TLS 加密通信和用於安全部署的精細訪問控制列表 (ACL)。

誰在使用 Redis?

Redis 用戶

Redis 被許多網站用作緩存,但也被一些最大的SEO搜尋引擎優化公司和社交網絡使用。在2020 年 StackOverflow 開發者調查中,20.5% 的開發者表示他們目前正在使用 Redis。在最近四年的調查中,Redis 還被開發人員評為最喜愛的資料庫技術。

真愛

值得深入研究最後一點。調查定義“愛”的方式是開發人員當前是否正在使用該技術併計劃再次使用它。在所有資料庫技術中,Redis 一直是使用它、了解它並非常喜歡它的人中比例最高的,他們計劃在未來再次使用它。

一個很棒的界面

Redis 吸引開發人員的部分原因在於其簡單而優雅的命令界面。Eric Redmond 和 Jim Wilson 在他們的書《七週內的七個資料庫》中總結了這一點:

它不僅易於使用。這是一種快樂。如果 API 是程式設計師的 UX,那麼 Redis 應該與 Mac Cube 一起在現代藝術博物館中。

Redis 以高速簡化了服務和進程之間通用基礎數據結構的使用。借助 Lua 腳本和模塊,Redis 成為數據的可擴展領域特定語言 (DSL)。

如果它在內存中,為什麼它會持續存在於硬碟中?

Redis 可以配置為以兩種格式寫入硬碟,二進制格式和“僅附加文件”(AOF)格式。二進制格式反映內存中的內容,默認情況下處於啟用狀態。AOF 文件可以在配置中打開,它是所有命令的簡單日誌,可以重播這些命令以將節點返回到之前的狀態。兩者都可以配置為或多或少地寫入硬碟。

熱重啟

對於關鍵緩存部署,尤其是 Redis 存在於較慢的基礎設施之前,這些硬碟持久性設施允許“熱重啟”。如果沒有熱重啟功能,處理超出其背後基礎設施容量的流量的空緩存將使所有流量通過,可能導致該基礎設施不堪重負。

Redis 作為主資料庫

如果數據大小和風險狀況眾所周知並且與 Redis 的硬碟持久化模型相匹配,那麼它可以用作主資料庫。在這種情況下,仔細考慮具有數據複製、驅逐策略設置、使用硬碟持久性和自動備份的集群拓撲非常重要。可以將硬碟持久性配置為在每次新寫入時寫入硬碟,但這會降低性能。

它是如何集群的?

Redis 為擴展和可用性提供了多種工具。一個是主/輔助伺服器設置,以及一個名為 Redis Sentinel 的服務。最具可擴展性的解決方案是使用具有內置複製功能的水平集群,該複製將數據分佈在集群中的節點之間。

緩存時,數據存儲在其他地方,有時最好通過不使用複制來最大化集群拓撲中的存儲。緩存的熱重啟功能可以處理任何可能的節點重啟,而您的其他數據存儲可以作為數據的規範副本。

它是開源的嗎?有哪些替代方案?

在您的堆棧中使用純開源是避免供應商鎖定並仍然獲得高性能技術的好方法。Redis 在 BSD 3 條款許可下是完全開源的,這無疑促成了它的流行。

內存緩存開源緩存,是最接近 Redis 的競爭對手,儘管它在開發人員調查和 GitHub 上不太受歡迎。它專注於鍵/值緩存用例,缺乏 Redis 的額外數據結構或持久保存到硬碟以進行熱重啟的能力。在鍵/值用例中具有相似的內存性能以及 Redis 支持的許多額外功能,更常見的選擇是使用 Redis。

什麼時候不應該使用 Redis?

Redis 並不是真正用於緩存靜態資產

Redis 並不是真正用於緩存圖像、CSS 或視頻文件等網站的靜態資產。這些資產的交付最好通過 Web 伺服器配置或使用內容交付網絡 (CDN) 進行優化。

延遲不是問題

當延遲根本不是問題時,Redis 的吸引力可能不如 Apache Cassandra 等可以存儲到硬碟的資料庫。在您得出響應時間不會以某種方式影響您的用例之前,您應該閱讀我們的白皮書,該白皮書對延遲研究進行了完整概述。

用於存儲超大型數據集或某些類型的關鍵數據

Redis 可以保存關鍵數據,但作為數據存儲,如果數據大小超過集群的內存容量,它可能不是最佳選擇。

對於關鍵數據,Redis 集群可以配置數據複製,以便在節點間保存多個數據副本。此外,Redis 的硬碟持久性可以配置為在每次寫入時發生,儘管這會影響性能。硬碟文件的備份可以增加另一層數據安全性。在即使這還不夠的用例中,Redis 仍然可以作為另一個數據存儲前面的快速緩存。

結論

Redis 是一個非常流行、快速、靈活的內存資料庫,具有許多出色的數據結構。這些功能使其成為最通用的 NoSQL 資料庫之一,具有其他內存競爭者的超集功能。

您可以通過我們的免費試用版試用Redis,或者如果您有任何問題,請與我們聯繫。

為您的數據基礎架構提供透明、公平和靈活的定價: 在此處查看 Instaclustr 定價