RediSearch和Redis Streams實戰原始碼

banq發表於2021-11-29

解決方案是使用RediSearchRedis Streams,該解決方案由多個協作元件組成。
程式碼可在此 GitHub 儲存庫中找到 — https://github.com/abhirockzz/redis-streams-in-action
以下是各個元件的摘要:
  1. Twitter Stream Consumer:一個Rust應用程式,用於使用流式 Twitter 資料並將它們傳遞給 Redis Streams。
  2. 推文處理器:來自 Redis Streams 的推文由 Java 應用程式處理
  3. 監控服務:最後一部分是一個Go應用程式,用於監控推文處理器服務的進度並確保重新處理任何失敗的記錄。

在 Redis 5.0 中引入的 Redis Streams 提供了最好的 Pub/Sub 和列表以及可靠的訊息傳遞、訊息重播的永續性、用於負載平衡的消費者組、用於監控的待處理條目列表等等!它的不同之處在於它是一種append-only log資料結構。簡而言之,生產者可以新增記錄(使用XADD),消費者可以訂閱到達流的新專案(使用XREAD)。它支援範圍查詢(XRANGE等),並且由於消費者組,一組應用程式可以分配處理負載(XREADGROUP)並可以監控其狀態(XPENDING等)。
  

Redis Streams
讓我們回顧一下Redis Streams的一些命令,按功能分組以便於理解:
新增條目

  • 只有一種方法可以將訊息新增到 Redis 流。XADD將指定的流條目附加到指定鍵的流中。如果鍵不存在,作為執行此命令的副作用,鍵是使用流值建立的。

讀取條目
  • XRANGE返回匹配給定 ID 範圍的流條目(-和+特殊 ID 分別表示流中可能的最小 ID 和最大可能 ID)
  • XREVRANGE與 完全一樣XRANGE,但不同的是以相反的順序返回條目(首先使用結束 ID,然後使用開始 ID)
  • XREAD從一個或多個流中讀取資料,只返回 ID 大於呼叫者報告的最後接收到的 ID 的條目。
  • XREADGROUP是該XREAD命令的特殊版本,支援消費者組。您可以建立客戶端組,這些客戶端使用到達給定流的訊息的不同部分

管理 Redis 流
  • XACK從PEL流消費者組的 Pending Entries List ( ) 中刪除一條或多條訊息。
  • XGROUP用於管理與 Redis 流關聯的消費者組。
  • XPENDING用於檢查待處理訊息列表,以觀察和了解流消費者組發生的情況。
  • XCLAIM用於獲取訊息的所有權並繼續處理。
  • XAUTOCLIAM轉移與指定條件匹配的待處理流條目的所有權。從概念上講,XAUTOCLAIM相當於呼叫XPENDING然後XCLAIM

刪除
  • XDEL從流中刪除指定的條目,並返回刪除的條目數,如果某些 ID 不存在,則該數可能與傳遞給命令的 ID 數不同。
  • 如果需要,XTRIM透過驅逐較舊的條目(具有較低 ID 的條目)來修剪流。


RediSearch
Redis 擁有一套通用的資料結構,從簡單的字串一直到強大的抽象,如 Redis Streams。本機資料型別可以帶您走很長的路,但有些用例可能需要解決方法。一個例子是要求在 Redis 中使用二級索引,以便超越基於鍵的搜尋/查詢以獲得更豐富的查詢功能。雖然您可以使用排序集、列表等來完成工作,但您需要考慮一些權衡因素。
RediSearch由於一流的二級索引引擎,可作為 Redis 模組使用,提供靈活的搜尋功能。它的一些主要功能包括全文搜尋、自動完成和地理索引。還有許多其他功能的詳細探索超出了本部落格系列的範圍。我強烈建議您閱讀文件以進一步探索。現在,這裡是一些RediSearch命令的快速概述。您將在後續的部落格文章中看到它們的作用。
兩個最重要的命令包括建立索引和執行搜尋查詢:

  • FT.CREATE用於建立具有給定架構和相關詳細資訊的索引。
  • FT.SEARCH使用文字查詢搜尋索引,返回文件或僅返回 id。

您可以對索引執行其他操作:
  • FT.DROPINDEX刪除索引。請注意,預設情況下,它不會刪除與索引關聯的文件雜湊
  • FT.INFO返回有關索引的資訊和統計資訊,例如文件數量、不同術語的數量等。
  • FT.ALTER SCHEMA ADD向索引新增一個新欄位。這會導致將來的文件更新在索引和重新索引現有文件時使用新欄位。

要使用自動完成功能,您可以使用“建議”:
  • FT.SUGADD將建議字串新增到自動完成的建議字典中。
  • FT.SUGGET獲取字首的完成建議。

RediSearch支援同義詞,它是由一組組組成的資料結構,每個組包含同義詞。FT.SYNUPDATE可用於建立或更新具有附加術語的同義片語。
如果您想要查詢拼寫檢查更正(類似於“您的意思是”功能),您可以使用FT.SPELLCHECK對查詢執行拼寫更正,返回拼寫錯誤的建議。
字典是一組術語。字典可用於修改 RediSearch 查詢拼寫更正的行為,方法是在潛在的拼寫更正建議中包含或排除其內容。您可以分別使用FT.DICTADDFT.DICTDEL新增和刪​​除術語。


相關文章