使用 Infinispan 快取功能支援多個 Redis 資料庫

PetterLiu發表於2024-11-14

使用 Infinispan 快取功能支援多個 Redis 資料庫

image

Infinispan 15 中,我們提供了大量命令,可以在不更改程式碼的情況下將 Redis 伺服器替換為 Infinispan。在本教程中,您將瞭解 Infinispan 快取別名如何幫助您將多個 Redis 資料庫的 Redis 伺服器替換為 Infinispan

關鍵要點

  • 什麼是快取別名以及如何使用別名建立快取或更新現有快取
  • 瞭解 Infinispan 和 Redis 在資料組織方面的差異
  • 使用 RESP 協議時,支援在 Infinispan 中使用快取別名的多個資料庫

從 Infinispan 15.0(撰寫本文時最新的穩定版本)開始,就可以支援多個 Redis 資料庫。但是,Hot Rod、CLI 和 Infinispan 控制檯支援是 Infinispan 15.1 中的技術預覽版(目前正在開發中)。

從 Infinispan 15 開始,您可以將 Infinispan 用作 Redis 的熱替代,因為它透過 RESP 協議支援大多數 Redis 命令。這之所以有效,是因為 Infinispan Server 預設啟用了 RESP 端點。Redis 客戶端將自動連線並路由到 Infinispan 的內部聯結器。

image

執行 Infinispan 伺服器並使用 Redis 客戶端

使用 Infinispan Server 測試 Redis 客戶端非常簡單。首先,按照 “入門教程” 中的說明執行 Infinispan Server。

使用 Docker 或 Podman 的命令列:

docker run -it -p 11222:11222 -e USER="admin" -e PASS="password" quay.io/infinispan/server:15.1

podman run -it -p 11222:11222 -e USER="admin" -e PASS="password" --net=host quay.io/infinispan/server:15.1

接下來,使用 Redis-CLI 連線到 Infinispan,使用埠 11222 而不是預設的 6379。由於 Infinispan 預設是安全的,因此請確保提供管理員憑證。
> redis-cli -p 11222 --user admin --pass password
127.0.0.1:11222> set hello world
OK
127.0.0.1:11222> get hello
"world"
如果您想知道資料的儲存位置,它位於 “respCache” 中。這是 Infinispan RESP 聯結器使用的預設快取,並且它預先配置了合理的預設值。它隨時可用,可以作為 Redis 的良好替代品。請注意,從 Infinispan 15.1 開始,資料容器快取列表包括一個名為 “Aliases” 的新列, 我們稍後會介紹。
http://localhost:11222 (admin/password) 憑據中的 Infinispan Server Console:
image

Redis 資料庫與 Infinispan 快取


在 Redis 中,資料庫本質上是單個 Redis 伺服器中獨立、隔離的名稱空間。每個資料庫都可以獨立於其他資料庫儲存自己的鍵值對集。
預設情況下,Redis 提供 16 個資料庫,編號範圍為 0 到 15。您可以使用 SELECT 命令在這些資料庫之間切換。此功能有助於組織資料並隔離同一 Redis 例項中的不同應用程式或使用案例,但請務必注意,所有資料庫共享相同的記憶體空間和配置設定。
另一方面,Infinispan 採用分散式快取模型,其中資料分佈在多個節點上。它不使用單獨資料庫的概念;相反,它使用快取來組織資料,快取可以使用不同的設定進行配置,並在叢集中進行分割槽。資料在多個節點之間分佈和複製,從而提供高可用性和可擴充套件性。沒有與 Redis 的資料庫直接對應的資料庫,但可以使用不同的快取和配置對資料進行分段。
下表是 Redis 資料庫和 Infinispan 快取之間的主要區別:

image

如果 Infinispan 聯結器預設使用名為 “respCache” 的單個快取,則可以透過使用 快取別名來支援多個 Redis 資料庫。

快取別名

在 Infinispan 中,快取別名是您可以分配給快取的備用名稱。它們允許您使用不同的名稱引用相同的底層快取配置。Infinispan 中的快取別名允許在快取資料的不同版本或狀態之間高效切換,而無需修改或重新載入應用程式邏輯。這使得快取別名在需要更新資料但您希望確保高可用性和對應用程式效能的影響最小的情況下特別有用。

快取別名的用例

Infinispan 中的快取別名非常適合在不中斷應用程式的情況下管理不斷變化的資料。它允許您在資料快照之間輕鬆切換。您可以在載入新資料版本時繼續使用舊資料版本。當新資料準備就緒時,您只需將別名切換為指向它,無需停機。由於您的應用不會觸及正在更新的快取,因此具有更好的效能和高可用性,它可以平穩執行而不會出現減速或錯誤。如果出現問題,您可以快速回滾並使用別名切換到以前的資料版本。

例如,假設一個線上商店需要更新其目錄:

  1. 商店使用當前資料 (current_catalog 指向 catalog_snapshot_1) 不斷顯示產品。
  2. 當客戶瀏覽時,新產品資料會在後臺載入到 catalog_snapshot_2
  3. catalog_snapshot_2 完全更新後,別名 (current_catalog) 將切換為指向 catalog_snapshot_2
  4. 現在可以免費清除舊的 catalog_snapshot_1 快取並用於下一次更新。

該網站更新其目錄資料,而不會給使用者造成重大延遲或停機時間。

使用別名建立快取

在學習如何使用 RESP 協議和多個資料庫的快取別名之前,我們先學習如何建立和更新快取別名。在 Infinispan 中建立快取或快取配置的方法有很多種,但我最喜歡的是使用 Infinispan Server Console

執行 Infinispan Server 並訪問控制檯,如 “入門教程” 中所述。要建立快取,請單擊 “Create Cache” 按鈕使用快取建立嚮導。在快取調整步驟中,您會找到 “Aliases” 選項,您可以在其中新增任意數量的別名。

image

在最後一步中,您將能夠檢視 JSON、XMLYAML 格式的配置

image

使用別名建立快取時,列表將顯示快取的別名。您可以使用 “search by” 欄位按名稱或別名篩選快取

image

在執行時新增別名

對於現有的快取,好訊息!快取配置中的 aliases 屬性可以在執行時更改。您可以透過多種方式執行此操作:

Hotrod 中使用管理 API

使用 Infinispan 伺服器命令列介面 (CLI)

使用 Server ConsoleREST API

要執行此操作,您需要在 Infinispan 中具有 ADMIN 訪問許可權\

使用 Hotrod 客戶端

要在執行時修改別名,請使用管理 API。下面是客戶端/伺服器模式的示例。如果你在你的應用程式中使用 Infinispan Embedded,可以使用類似的 API。

RemoteCacheManager remoteCacheManager = // created or injected if using Quarkus or Spring Boot
remoteCacheManager.administration().updateConfigurationAttribute("myCache", "aliases", "alias alias2");
RemoteCache<String, String> cacheFromAlias = cacheManager.getCache("alias");

使用命令列工具

Infinispan 的命令列工具 (CLI) 提供了一種在執行時更改快取別名的方法。首先,使用以下命令執行 CLI:

podman or docker run -it --net=host infinispan/cli

從命令列連線到正在執行的伺服器:

[disconnected]> connect
Username: admin
Password: ********
[6b0130c153e3-50183@cluster//containers/default]

然後,使用 alter cache 命令更新 aliases 屬性:

alter cache myCache2 --attribute=aliases --value=current_catalog

最後,描述快取的配置並驗證更改:

[6b0130c153e3-50183@cluster//containers/default]> describe caches/myCache2
{
"myCache2" : {
"distributed-cache" : {
"aliases" : [ "current_catalog" ],
"owners" : "2",
"mode" : "SYNC",
"statistics" : true,
"encoding" : {
"media-type" : "application/x-protostream"
}
}
}
}

使用 Server Console控制檯

從快取列表中,選擇 Edit aliases 操作:

image

支援多個資料庫

讓我們嘗試使用 Redis CLI 選擇資料庫 01。要在 Redis 中切換資料庫,請使用 SELECT 命令,後跟資料庫編號。讓我們再次嘗試 Infinispan。首先,使用 SELECT 0 從資料庫 0 開始。然後,使用 SELECT 1 切換到資料庫 1

> redis-cli --user admin --pass password
127.0.0.1:11222[1]> select 0
OK
127.0.0.1:11222[1]> select 1
(error) ERR DB index is out of range

資料庫 0 有效,但資料庫 1 無效。仔細檢查 respCache 配置,我們看到定義了別名為“0”的預設 respCache

image

要選擇 資料庫 “1”,您需要建立一個新的快取。讓我們再次使用 Infinispan Console 來執行此操作。轉到快取建立嚮導,這次選擇 “add cache configuration” 選項.
選擇 RESP。DIST 模板並建立快取。此模板專為 RESP 快取設計:

image

最後,將別名 “1” 新增到新快取中,如在執行時新增別名部分所述。或者,您可以從 respCache 複製並貼上配置,將別名 0 更改為別名 1

image

現在我們有一個別名為 1 的快取,我們可以選擇並新增以下資料

> redis-cli --user admin --pass password
127.0.0.1:11222[1]> select 0
OK
127.0.0.1:11222[1]> select 1
OK
127.0.0.1:11222[1]> set hello word
OK

需要強調的是,與 Redis 資料庫不同,每個快取都可以根據應用程式的需要進行不同的設定。這使您可以利用 Infinispan 的靈活配置(例如,您可以使用跨站點複製為某些“資料庫”新增備份,而不是全部),同時仍然保持在您的應用程式中使用 Redis 客戶端的簡單性。


結論

在本教程中,您學習瞭如何將多個資料庫與 RESP 協議結合使用,以及如何使用 Infinispan 快取來替代 Redis 資料庫。如前所述,透過使用不同的快取而不是 Redis 資料庫,您可以獲得多項優勢。現在可以根據您的特定場景,以更靈活、更有效的方式滿足您的資料需求。您還了解了什麼是快取別名以及它們在不同情況下的幫助,而不僅僅是 Redis 資料庫。

Infinispan快取的優勢
  1. 高可用性和容錯性:Infinispan基於分散式架構,當一個節點出現故障時,其他節點可以自動接管,保證系統的連續性和可用性。
  2. 高效能:Infinispan可以快取各種物件,包括Java序列化物件、POJO、JSON和XML等不同格式的資料,效能高效。它提供了多種快取策略和資料持久化方式,使得資料的讀取和寫入速度更加高效。
  3. 靈活性:Infinispan提供了多種配置選項,可以根據應用場景調整快取功能和效能引數。同時,它也支援不同的分散式模型和叢集配置,如對等節點和主從節點。
  4. 可擴充套件性和易用性:Infinispan易於整合到各種Java應用程式中,並與Spring、Hibernate、JPA等流行框架整合使用。
  5. 分散式特性:Infinispan不僅可以用作快取記憶體,還可以實現分散式鎖、分散式資料儲存和分散式計算框架等功能,更加高效地利用叢集資源。
適用業務場景

相比Redis,Infinispan在以下業務場景中更具優勢:

  1. 需要高效能和高可用性的Java應用程式:Infinispan與Java生態系統緊密整合,提供了高效能和高可用性的快取解決方案。
  2. 需要分散式資料儲存和處理的應用程式:Infinispan支援分散式資料儲存和處理,可以將資料儲存在多個節點上,提高資料的可用性和容錯性。
  3. 需要向量搜尋功能的應用程式:從版本15開始,Infinispan支援向量搜尋,為機器學習和AI應用提供了新的可能性。

例如,在推薦系統和實時分析等需要快速資料查詢和處理的應用場景中,Infinispan的向量搜尋功能可以發揮重要作用。



今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 專案管理, 產品管理,資訊保安,團隊建設 有參考作用 , 您可能感興趣的文章:
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
影片直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續整合/CD
網際網路電商購物車架構演變案例
網際網路業務場景下訊息佇列架構
網際網路高效研發團隊管理演進之一
訊息系統架構設計演進
網際網路電商搜尋架構演化之一
企業資訊化與軟體工程的迷思
企業專案化管理介紹
軟體專案成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
專案管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
網際網路資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之效能實時度量系統演變

如有想了解更多軟體設計與架構, 系統IT,企業資訊化, 團隊管理 資訊,請關注我的微信訂閱號:

image_thumb2_thumb_thumb_thumb_thumb[1]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。 該文章也同時釋出在我的獨立部落格中-Petter Liu Blog。

相關文章