最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis 數(shù)據(jù)類型Streams詳解

 更新時間:2024年10月23日 14:50:28   作者:小學徒WQ  
Redis Streams是Redis 5.0新增的數(shù)據(jù)類型,提供了一種日志結(jié)構(gòu)化數(shù)據(jù)存儲方式,這種類型適合用于構(gòu)建消息隊列、事件日志和處理時間序列數(shù)據(jù)的應用,本文介紹Redis 數(shù)據(jù)類型Streams相關(guān)知識,感興趣的朋友一起看看吧

Redis Streams 是 Redis 5.0 引入的一種新的數(shù)據(jù)類型,它提供了一種強大的日志結(jié)構(gòu)化數(shù)據(jù)存儲方式。Streams 類型非常適合用于構(gòu)建消息隊列、事件日志以及其他需要持久化和高效處理時間序列數(shù)據(jù)的應用場景。

1 基本特性

  • 持久性:與傳統(tǒng)的發(fā)布/訂閱不同,Streams 中的消息是持久化的,即使客戶端斷開連接后重新連接,仍然可以訪問到之前的消息。
  • 多消費者支持:支持多個消費者組(consumer groups),每個組可以獨立地消費流中的消息。消費者組允許不同的消費者處理相同的消息,但每個消息在一個組內(nèi)只能被一個消費者處理一次。
  • 消息 ID 和范圍查詢:每條消息都有一個唯一的 ID,由時間戳和序列號組成。可以通過指定消息 ID 范圍來獲取特定時間段內(nèi)的消息。
  • 阻塞讀?。褐С肿枞x取(XREAD 和 XREADGROUP 命令的 BLOCK 選項),使得客戶端可以在沒有新消息時等待一段時間。
  • 自動刪除:可以設(shè)置最大長度(MAXLEN 選項)來限制流的大小,超過長度的消息會自動被刪除。
  • 靈活的消息格式:每條消息可以包含多個字段-值對,類似于哈希表,這使得消息可以攜帶豐富的信息。

2 主要操作命令 

2.1 XADD key ID field value [field value ...]

向指定的流中添加一條新消息,ID 可以是 *(表示自動生成)或指定的時間戳和序列號。

127.0.0.1:6379> xadd mystream * sensor_id 123 temmperature 22.5
"1729306027171-0"

返回的結(jié)構(gòu)可以分為兩部分:

  • 時間戳1729306027171 (表示條目被添加的時間,單位是毫秒。你可以將這個時間戳轉(zhuǎn)換為可讀的日期和時間格式。
  • 序列號0 (表示在同一毫秒內(nèi)這是第一個條目。如果在同一毫秒內(nèi)添加了多個條目,序列號將會遞增,例如 1729306027171-11729306027171-2 等。

2.2 XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]

  • 從一個或多個 Stream 中讀取數(shù)據(jù)。
  • COUNT 指定返回的最大條目數(shù)。
  • BLOCK 指定在沒有新消息時阻塞的時間(毫秒)。
  • STREAMS 指定要讀取的 Stream 和起始 ID。

COUNT 指定返回的最大條目數(shù)。BLOCK 指定在沒有新消息時阻塞的時間(毫秒)。STREAMS 指定要讀取的 Stream 和起始 ID。

127.0.0.1:6379> xread count 2 streams mystream 0-0
1) 1) "mystream"
   2) 1) 1) "1729306027171-0"
         2) 1) "sensor_id"
            2) "123"
            3) "temmperature"
            4) "22.5"

2.3 XRANGE key start end [COUNT count]

  • 返回指定 ID 范圍內(nèi)的條目。
  • start 和 end 是 ID,可以使用 - 表示最小 ID,+ 表示最大 ID。
127.0.0.1:6379> xrange mystream - +
1) 1) "1729306027171-0"
   2) 1) "sensor_id"
      2) "123"
      3) "temmperature"
      4) "22.5"

2.4 XREVRANGE key end start [COUNT count]

返回指定 ID 范圍內(nèi)的條目,但按逆序排列。

127.0.0.1:6379> xadd mystream * sensor_id 234 temmperature 23.5
"1729329067777-0"
127.0.0.1:6379> xadd mystream * sensor_id 345
"1729329079135-0"
127.0.0.1:6379> xrevrange mystream + - count 2
1) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"
2) 1) "1729329067777-0"
   2) 1) "sensor_id"
      2) "234"
      3) "temmperature"
      4) "23.5"

2.5 XGROUP CREATE key groupname id-or-$ [MKSTREAM]

  • 創(chuàng)建一個新的消費者組。
  • id-or-$ 是起始位置,可以是具體的 ID 或 $ 表示只消費新的條目。
  • MKSTREAM 如果 Stream 不存在則創(chuàng)建它。
127.0.0.1:6379> xgroup create mystream mygroup 0
OK

2.6 XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]

  • 從消費者組中讀取數(shù)據(jù)。
  • GROUP:指定消費者組的名稱。
  • consumer:指定消費者的名稱。
  • COUNT count:可選參數(shù),指定一次最多讀取的消息數(shù)量。
  • BLOCK milliseconds:可選參數(shù),如果當前沒有可用的消息,命令將阻塞指定的時間(以毫秒為單位),等待新消息的到來。
  • NOACK: 表示不確認消息,通常用于快速消費。
  • STREAMS:指定要讀取的流及其對應的 ID。
  • ID 通常是一個特殊值 >,表示只讀取新的消息;也可以是具體的 ID,表示從該 ID 開始讀取。
127.0.0.1:6379> xreadgroup group mygroup consumer1 count 2 streams mystream >
1) 1) "mystream"
   2) 1) 1) "1729306027171-0"
         2) 1) "sensor_id"
            2) "123"
            3) "temmperature"
            4) "22.5"
      2) 1) "1729329067777-0"
         2) 1) "sensor_id"
            2) "234"
            3) "temmperature"
            4) "23.5"

2.7 XACK key group ID [ID ...]

確認已處理的消息。XACK 命令用于確認消費者組中的消息已經(jīng)被成功處理。當你使用 XACK 命令時,Redis 會將指定的消息從“待處理”狀態(tài)轉(zhuǎn)換為“已確認”狀態(tài),并從消費者的待處理列表中移除。

127.0.0.1:6379> xack mystream mygroup 1729329067777-0
(integer) 1
127.0.0.1:6379> xack mystream mygroup 1729329079135-0
(integer) 0

當 XACK 命令成功確認一條消息時,返回值為 1,表示該消息已經(jīng)被確認并且從待處理列表中移除。例如,如果消息 1729329067777-0 是由 consumer1 處理的,并且現(xiàn)在調(diào)用 XACK 確認它,那么這條消息將不再出現(xiàn)在 consumer1 的待處理列表中。

2.8 XPENDING key group [start end count] [IDLE idle]

查看待處理的消息。

127.0.0.1:6379> xpending mystream mygroup
1) (integer) 1
2) "1729306027171-0"
3) "1729306027171-0"
4) 1) 1) "consumer1"
      2) "1"
127.0.0.1:6379> xack mystream mygroup 1729306027171-0
(integer) 1
127.0.0.1:6379> xpending mystream mygroup
1) (integer) 0
2) (nil)
3) (nil)
4) (nil)

2.9 XCLAIM key group consumer min-idle-time ID [ID ...] [IDLE idle] [TIME time] [RETries count] [FORCE]

用于將一個或多個消息從一個消費者轉(zhuǎn)移到另一個消費者。這個命令通常用于處理消息超時或重新分配消息的情況。XCLAIM 允許你手動將消息從一個消費者的待處理列表移動到另一個消費者的待處理列表。

127.0.0.1:6379> xreadgroup group mygroup consumer1 count 2 streams mystream >
1) 1) "mystream"
   2) 1) 1) "1729329079135-0"
         2) 1) "sensor_id"
            2) "345"
127.0.0.1:6379> xclaim mystream mygroup consumer2 10000 1729329079135-0
1) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"
  • mystream:流的名稱。mygroup:消費者組的名稱。
  • consumer2:目標消費者的名稱,即消息將被轉(zhuǎn)移給這個消費者。
  • 10000:消息的空閑時間(以毫秒為單位)。只有那些空閑時間超過這個值的消息才會被轉(zhuǎn)移。
  • 1729329079135-0:要轉(zhuǎn)移的消息 ID。

2.10 XINFO 

獲取 Stream 或消費者組的信息。

127.0.0.1:6379> xinfo stream mystream
 1) "length"
 2) (integer) 3
 3) "radix-tree-keys"
 4) (integer) 1
 5) "radix-tree-nodes"
 6) (integer) 2
 7) "groups"
 8) (integer) 1
 9) "last-generated-id"
10) "1729329079135-0"
11) "first-entry"
12) 1) "1729306027171-0"
    2) 1) "sensor_id"
       2) "123"
       3) "temmperature"
       4) "22.5"
13) "last-entry"
14) 1) "1729329079135-0"
    2) 1) "sensor_id"
       2) "345"
127.0.0.1:6379> xinfo groups mystream
1) 1) "name"
   2) "mygroup"
   3) "consumers"
   4) (integer) 2
   5) "pending"
   6) (integer) 1
   7) "last-delivered-id"
   8) "1729329079135-0"
127.0.0.1:6379> xinfo consumers mystream mygroup
1) 1) "name"
   2) "consumer1"
   3) "pending"
   4) (integer) 0
   5) "idle"
   6) (integer) 255317
2) 1) "name"
   2) "consumer2"
   3) "pending"
   4) (integer) 1
   5) "idle"
   6) (integer) 191940

XINFO STREAM mystream

length:

流中的消息總數(shù):3 條。

radix-tree-keys:

用于存儲流數(shù)據(jù)的 radix tree 中的鍵的數(shù)量:1 個。

radix-tree-nodes:

用于存儲流數(shù)據(jù)的 radix tree 中的節(jié)點數(shù)量:2 個。

groups:

與該流關(guān)聯(lián)的消費者組數(shù)量:1 個。

last-generated-id:

流中最后生成的消息 ID:1729329079135-0。

first-entry:

流中的第一條消息: 消息 ID: 1729306027171-0消息內(nèi)容: sensor_id123temmperature22.5

last-entry:

流中的最后一條消息: 消息 ID: 1729329079135-0消息內(nèi)容: sensor_id345

XINFO GROUPS mystream

name:

消費者組的名稱:mygroup。

consumers:

該組中的消費者數(shù)量:2 個。

pending:

該組中待處理的消息數(shù)量:1 條。

last-delivered-id:

該組中最后一個被交付的消息 ID:1729329079135-0。

XINFO CONSUMERS mystream mygroup

第一個消費者:

第一個消費者:

  • nameconsumer1
  • pending: 待處理的消息數(shù)量:0 條
  • idle: 空閑時間(以毫秒為單位):255,317 毫秒(約 4 分鐘 15 秒)

第二個消費者:

  • nameconsumer2
  • pending: 待處理的消息數(shù)量:1 條
  • idle: 空閑時間(以毫秒為單位):191,940 毫秒(約 3 分鐘 12 秒)

2.11  XDEL key ID [ID ...]

從 Stream 中刪除一個或多個條目。

127.0.0.1:6379> xdel mystream 1729306027171-0
(integer) 1
127.0.0.1:6379> xrange mystrea - +
(empty list or set)
127.0.0.1:6379> xrange mystream - +
1) 1) "1729329067777-0"
   2) 1) "sensor_id"
      2) "234"
      3) "temmperature"
      4) "23.5"
2) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"

2.12 XTRIM key MAXLEN [~] len

修剪 Stream,保留最多 len 個條目,~ 表示近似長度。

127.0.0.1:6379> xrange mystream - +
1) 1) "1729329067777-0"
   2) 1) "sensor_id"
      2) "234"
      3) "temmperature"
      4) "23.5"
2) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"
127.0.0.1:6379> xtrim mystream maxlen 1
(integer) 1
127.0.0.1:6379> xrange mystream - +
1) 1) "1729329079135-0"
   2) 1) "sensor_id"
      2) "345"

3 使用場景

  • 日志記錄:可以用來存儲系統(tǒng)的日志信息,方便后續(xù)分析和處理。
  • 事件流:處理實時事件,如傳感器數(shù)據(jù)、用戶行為等。
  • 消息隊列:實現(xiàn)可靠的消息傳遞系統(tǒng),支持多個消費者組。
  • 任務隊列:管理后臺任務,確保任務被正確處理。

更多命令請參考:Commands | Docs 

到此這篇關(guān)于Redis 數(shù)據(jù)類型Streams的文章就介紹到這了,更多相關(guān)Redis 數(shù)據(jù)類型Streams內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis的RDB持久化與AOF持久化詳解

    Redis的RDB持久化與AOF持久化詳解

    這篇文章主要介紹了Redis的RDB持久化與AOF持久化詳解,Redis是許多公司都在使用的一款高性能、非關(guān)系型數(shù)據(jù)庫,其中最為重要的一個特性就是它支持持久化,本文將深入介紹Redis持久化原理,包括RDB和AOF兩種方式的實現(xiàn),需要的朋友可以參考下
    2023-07-07
  • Redis 使用跳表實現(xiàn)有序集合的方法

    Redis 使用跳表實現(xiàn)有序集合的方法

    Redis有序集合底層為什么使用跳表而非其他數(shù)據(jù)結(jié)構(gòu)如平衡樹、紅黑樹或B+樹的原因在于其特殊的設(shè)計和應用場景,跳表提供了與平衡樹類似的效率,同時實現(xiàn)更簡單,調(diào)試和修改也更加容易,感興趣的朋友一起看看吧
    2024-09-09
  • k8s部署redis集群搭建過程示例詳解

    k8s部署redis集群搭建過程示例詳解

    這篇文章主要為大家介紹了k8s部署redis集群搭建過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Redis分布式緩存-Redis持久化詳解

    Redis分布式緩存-Redis持久化詳解

    RDB持久化將內(nèi)存數(shù)據(jù)快照到磁盤,用于故障恢復;AOF持久化記錄每個寫命令,提供數(shù)據(jù)安全性,兩者各有優(yōu)缺點,可根據(jù)需求選擇或結(jié)合使用
    2024-12-12
  • Redis主從復制的原理分析

    Redis主從復制的原理分析

    Redis主從復制通過將數(shù)據(jù)鏡像到多個從節(jié)點,實現(xiàn)高可用性和擴展性,主從復制包括初次全量同步和增量同步兩個階段,為優(yōu)化復制性能,可以采用AOF持久化、調(diào)整復制超時時間、優(yōu)化網(wǎng)絡帶寬等措施,故障轉(zhuǎn)移機制依賴于Sentinel或Cluster組件
    2025-01-01
  • Redis哨兵主備切換的數(shù)據(jù)丟失問題及解決

    Redis哨兵主備切換的數(shù)據(jù)丟失問題及解決

    主備切換過程中可能會導致數(shù)據(jù)丟失,異步復制和腦裂是兩種主要原因,異步復制可能導致部分數(shù)據(jù)未復制到slave而master宕機,腦裂則可能導致多個master存在,舊master恢復后數(shù)據(jù)被清空,從而丟失數(shù)據(jù)
    2024-12-12
  • Redis持久化機制RDB的實現(xiàn)

    Redis持久化機制RDB的實現(xiàn)

    在Redis中,RDB是一種將內(nèi)存中的數(shù)據(jù)保存到磁盤上的持久化機制,本文主要介紹了Redis持久化機制RDB的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • redis安裝與使用方法示例講解

    redis安裝與使用方法示例講解

    Redis是一個高性能的內(nèi)存鍵值存儲數(shù)據(jù)庫,它支持多種數(shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合和有序集合等這篇文章主要介紹了redis安裝與使用方法的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • redis 解決庫存并發(fā)問題實現(xiàn)數(shù)量控制

    redis 解決庫存并發(fā)問題實現(xiàn)數(shù)量控制

    本文主要介紹了redis 解決庫存并發(fā)問題實現(xiàn)數(shù)量控制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • redis重新創(chuàng)建集群的實現(xiàn)步驟

    redis重新創(chuàng)建集群的實現(xiàn)步驟

    本文主要介紹了redis重新創(chuàng)建集群的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-05-05

最新評論

太仆寺旗| 高唐县| 仙游县| 抚顺县| 剑川县| 于都县| 昭通市| 英吉沙县| 池州市| 凉城县| 青铜峡市| 栾川县| 北票市| 乐山市| 桐城市| 当雄县| 塔城市| 旺苍县| 商南县| 濉溪县| 水城县| 嵊泗县| 咸宁市| 九龙城区| 景谷| 长葛市| 咸阳市| 淳化县| 蚌埠市| 丹阳市| 巢湖市| 法库县| 方山县| 永登县| 东乌珠穆沁旗| 叙永县| 贵阳市| 芮城县| 海淀区| 阜康市| 沂源县|