RediSearch和Redis Streams實戰原始碼
解決方案是使用RediSearch和Redis Streams,該解決方案由多個協作元件組成。
程式碼可在此 GitHub 儲存庫中找到 — https://github.com/abhirockzz/redis-streams-in-action
以下是各個元件的摘要:
- Twitter Stream Consumer:一個Rust應用程式,用於使用流式 Twitter 資料並將它們傳遞給 Redis Streams。
- 推文處理器:來自 Redis Streams 的推文由 Java 應用程式處理
- 監控服務:最後一部分是一個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
刪除
RediSearch
Redis 擁有一套通用的資料結構,從簡單的字串一直到強大的抽象,如 Redis Streams。本機資料型別可以帶您走很長的路,但有些用例可能需要解決方法。一個例子是要求在 Redis 中使用二級索引,以便超越基於鍵的搜尋/查詢以獲得更豐富的查詢功能。雖然您可以使用排序集、列表等來完成工作,但您需要考慮一些權衡因素。
RediSearch由於一流的二級索引引擎,可作為 Redis 模組使用,提供靈活的搜尋功能。它的一些主要功能包括全文搜尋、自動完成和地理索引。還有許多其他功能的詳細探索超出了本部落格系列的範圍。我強烈建議您閱讀文件以進一步探索。現在,這裡是一些RediSearch命令的快速概述。您將在後續的部落格文章中看到它們的作用。
兩個最重要的命令包括建立索引和執行搜尋查詢:
您可以對索引執行其他操作:
- FT.DROPINDEX刪除索引。請注意,預設情況下,它不會刪除與索引關聯的文件雜湊
- FT.INFO返回有關索引的資訊和統計資訊,例如文件數量、不同術語的數量等。
- FT.ALTER SCHEMA ADD向索引新增一個新欄位。這會導致將來的文件更新在索引和重新索引現有文件時使用新欄位。
要使用自動完成功能,您可以使用“建議”:
RediSearch支援同義詞,它是由一組組組成的資料結構,每個組包含同義詞。FT.SYNUPDATE可用於建立或更新具有附加術語的同義片語。
如果您想要查詢拼寫檢查更正(類似於“您的意思是”功能),您可以使用FT.SPELLCHECK對查詢執行拼寫更正,返回拼寫錯誤的建議。
字典是一組術語。字典可用於修改 RediSearch 查詢拼寫更正的行為,方法是在潛在的拼寫更正建議中包含或排除其內容。您可以分別使用FT.DICTADD和FT.DICTDEL新增和刪除術語。
相關文章
- 使用ZIO-Streams的Redis Stream消費者和生產者實現原始碼Redis原始碼
- 立即可用的實戰原始碼(springboot+redis+mybatis+restTemplate)原始碼Spring BootRedisMyBatisREST
- 使用Spring Boot和Kafka Streams實現基於SAGA模式的分散式事務原始碼教程 - PiotrSpring BootKafka模式分散式原始碼
- 【Redis原始碼】Redis 6 ACL原始碼詳解Redis原始碼
- Redis 中的 set 和 sorted set 如何使用,原始碼實現分析Redis原始碼
- 使用Spring Boot和Kafka Streams實現CQRSSpring BootKafka
- [Redis原始碼閱讀]實現一個redis命令--nonzerodecrRedis原始碼
- Redis實戰Redis
- 【譯】Redis喜提新資料結構:Redis StreamsRedis資料結構
- (六)Redis 訊息佇列 List、StreamsRedis佇列
- Redis原始碼閱讀:sds字串實現Redis原始碼字串
- Redis 實戰 —— 14. Redis 的 Lua 指令碼程式設計Redis指令碼程式設計
- 【Redis 系列】redis 學習十一,redis 的哨兵模式詳解和實戰Redis模式
- 機器學習實戰原始碼和資料集下載機器學習原始碼
- redis - hash 實戰Redis
- [Redis原始碼閱讀]dict字典的實現Redis原始碼
- 流和向量(Streams and Vectors)
- Redis Sentinel-深入淺出原理和實戰Redis
- Redis核心原理與實踐--Redis啟動過程原始碼分析Redis原始碼
- Redis原始碼閱讀:Redis字串SDSRedis原始碼字串
- [Redis原始碼閱讀]redis持久化Redis原始碼持久化
- Redis【1】- 如何閱讀 Redis 原始碼Redis原始碼
- Redis【1】- 如何閱讀 Redis原始碼Redis原始碼
- Redis原始碼剖析——客戶端和伺服器Redis原始碼客戶端伺服器
- Redis Redisson 分散式鎖的應用和原始碼Redis分散式原始碼
- JVM原始碼實戰 - OOP-Klass模型JVM原始碼OOP模型
- 結合實戰和原始碼來聊聊Java中的SPI機制?原始碼Java
- RediSearch的安裝Redis
- Netty 原始碼中對 Redis 協議的實現Netty原始碼Redis協議
- 實現SpringBoot + Redis快取的原始碼與教程Spring BootRedis快取原始碼
- Redis 7.x 入門和開發實戰Redis
- 【Redis叢集實戰】Redis Cluster 部署Redis
- redis的GEO實戰Redis
- SpringBoot整合Redis實戰Spring BootRedis
- Go操作Redis實戰GoRedis
- Redis 中使用 list,streams,pub/sub 幾種方式實現訊息佇列Redis佇列
- 《Python Web開發實戰》隨書原始碼PythonWeb原始碼
- ItemDecoration深入解析與實戰(一)——原始碼分析原始碼