国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何正確使用Redis Streams?

譯文
數據庫 其他數據庫 Redis
Redis Streams是一種新的Redis數據結構,用于管理生產者和消費者之間的數據通道。本文介紹了如何入手。

【51CTO.com快譯】 Redis是一種內存中的多模式數據庫,適用于諸多使用場合,包括內容緩存、會話存儲、實時分析、消息代理和數據流。去年,我撰文介紹了如何使用Redis Pub/Sub、Lists和Sorted Sets用于實時數據流處理,詳見https://www.infoworld.com/article/3212768/database/how-to-use-redis-for-real-time-stream-processing.html?,F在Redis 5.0已發布,Redis有了一種全新的數據結構來管理數據流。

有了Redis Streams數據結構,可以執行比Pub/Sub、Lists和Sorted Sets豐富得多的操作。Redis Streams有眾多優點,它讓你能夠執行下列操作:

  • 收集大量高速傳來的數據(唯一的瓶頸是你的網絡I/O);
  • 在許多生產者和許多消費者之間建立數據通道;
  • 即使生產者和消費者運作的速度不一樣,也能高效地管理數據的消費;
  • 你的消費者離線或斷開連接時確保數據持久化;
  • 在生產者和消費者之間異步通信;
  • 擴大消費者的數量;
  • 消費者在消費數據過程中失效時,實現類似事務的數據安全性;
  • 有效地使用主內存。

Redis Streams的最大優點是它內置于Redis中,因此部署或管理Redis Streams無需額外的步驟。我在本文中將逐步介紹使用Redis Streams的基本方面,包括如何將數據添加到數據流、如何讀取數據(一次性讀取、異步讀取和到達時讀取等),以滿足消費者的不同使用場合。

一、了解Redis Streams中的數據流

Redis Streams提供了一種“只允許追加”(append only)的數據結構,與日志類似。它提供了可以將數據源添加到數據流、使用數據流以及監控和管理如何消費數據的命令。 Streams數據結構很靈活,讓你可以以幾種方式來連接生產者和消費者。

如何正確使用Redis Streams?

圖1. Redis Streams的簡單應用,只有一個生產者和一個消費者

圖1表明了Redis Streams的基本用法。單單一個生產者充當數據源,消費者是將數據發送給相關接收者的消息傳遞應用程序。

如何正確使用Redis Streams?

圖2.多個消費者從Redis Streams讀取數據的應用

圖2中,一個公共數據流被多個消費者使用。使用Redis Streams,消費者可以按照自己的節奏來讀取和分析數據。

在下一個應用中,如圖3所示,情況變得復雜一點。該服務從多個生產者接收數據,并將所有數據存儲在Redis Streams數據結構中。該應用有多個消費者從Redis Streams讀取數據,讀取數據的還有消費者組(consumer group),消費者組支持無法與生產者保持同樣速度的消費者。

如何正確使用Redis Streams?

圖3. Redis Streams支持多個生產者和消費者

二、用Redis Streams將數據添加到數據流

圖3中的圖表只顯示了向Redis Stream添加數據的一種方法。雖然一個或多個生產者可以向數據結構添加數據,但任何新數據始終追加到數據流的末尾。

1.添加數據的默認方法

這是向Redis Streams添加數據的最簡單方法: 

  1. XADD mystream * name Anna  
  2. XADD mystream * name Bert  
  3. XADD mystream * name Cathy  

在上述命令中,XADD是Redis命令,mystream是數據流的名稱,Anna、Bert和Cathy是每一行添加的名稱,而*操作符告訴Redis為每一行自動生成識別符。這個命令得出三個mystream條目: 

  1. 1518951481323-0 name Cathy  
  2. 1518951480723-0 name Bert  
  3. 1518951480106-0 name Anna  

2.針對每個條目,為數據添加用戶管理的ID

Redis讓你可以為每個條目維護你自己的識別符(見下面)。雖然這在一些情況下很有用,但依賴自動生成的ID通常來得更簡單: 

  1. XADD mystream 10000000 name Anna  
  2. XADD mystream 10000001 name Bert  
  3. XADD mystream 10000002 name Cathy  

這得出下列的mystream條目: 

  1. 10000002-0 name Cathy  
  2. 10000001-0 name Bert  
  3. 10000000-0 name Anna  

3.為數據添加最大限制

你可以為數據流設置條目最大數: 

  1. XADD mystream MAXLEN 1000000 * name Anna  
  2. XADD mystream MAXLEN 1000000 * name Bert  
  3. XADD mystream MAXLEN 1000000 * name Cathy  

數據流達到1000000個左右條目的長度時,該命令驅逐舊條目。

一個小貼士:Redis Streams將數據存儲在基樹(radix tree)的宏節點中。每個宏節點有幾個數據項(通常在幾十個左右)。如果添加一個近似的MAXLEN值(如下所示),就沒必要為每次插入處理宏節點。如果幾十個數(比如1000000或1000050)對你來說關系不大,可以用近似字符(~)來調用命令,從而優化性能。 

  1. XADD mystream MAXLEN ~ 1000000 * name Anna  
  2. XADD mystream MAXLEN ~ 1000000 * name Bert  
  3. XADD mystream MAXLEN ~ 1000000 * name Cathy  

三、用Redis Streams消費來自數據流的數據

Redis Streams結構提供了一套豐富的命令和功能,以便以多種方式消費數據。

1.從數據流的開頭讀取所有內容

場景:數據流已含有你需要處理的數據,而且你想從開頭開始處理數據。

為此你要使用的命令是XREAD,它讓你可以從數據的開頭讀取所有或前N個條目。一條最佳實踐是,逐頁讀取數據始終是好主意。想從數據流的開頭讀取多達100個條目,命令是: 

  1. XREAD COUNT 100 STREAMS mystream 0 

假設1518951481323-0是你在上一個命令中收到的數據項的最后一個ID,你可以運行該命令,檢索下100個條目: 

  1. XREAD COUNT 100 STREAMS mystream 1518951481323-1 

2.異步消費數據(通過阻塞調用)

場景:你的消費者消費和處理數據的速度比數據添加到數據流的速度還快。

在許多使用場合下,消費者讀取的速度比生產者向數據流添加數據的速度還快。這種情況下,你希望消費者等待、新數據到達時接到通知。BLOCK選項讓你可以指定等待新數據的時長: 

  1. XREAD BLOCK 60000 STREAMS mystream 1518951123456-1 

在這里,XREAD返回1518951123456-1之后的所有數據。如果之后沒有數據,查詢將等待N= 60秒,直至新數據到達,然后超時中斷。如果你想要無限期地阻止該命令,按如下方式調用XREAD: 

  1. XREAD BLOCK 0 STREAMS mystream 1518951123456-1 

注意:在該示例中,你還可以使用XRANGE命令來逐頁檢索數據。

3.只讀取剛到達的新數據

場景:你只對處理從當前時間點開始的新數據集有興趣。

你反復讀取數據時,從上次停下來的地方重新開始始終是個好主意。比如在前一個示例中,你進行了阻塞調用以讀取大于1518951123456-1的數據。然而,你可能不知道最新的ID。在這種情況下,可以用$符號開始讀取數據流,該符號告訴XREAD命令只檢索新數據。由于該調用使用的BLOCK選項是60秒,它將等到數據流中有一些數據。 

  1. XREAD BLOCK 60000 STREAMS mystream $ 

這種情況下,你將開始用$選項讀取新數據。然而,不該用$選項進行后續調用。比如說,如果1518951123456-0是之前調用中檢索的數據的ID,你的下一個調用應該是: 

  1. XREAD BLOCK 60000 STREAMS mystream 1518951123456-1 

4.迭代數據流以讀取過去的數據

場景:你的數據流已有足夠的數據,你想查詢它已分析到目前為止收集的數據。

可以分別使用XRANGE和XREVRANGE,以向前或向后的方向讀取兩個條目之間的數據。在該示例中,命令讀取1518951123450-0和1518951123460-0之間的數據: 

  1. XRANGE mystream 1518951123450-0 1518951123460-0 

XRANGE還讓你可以借助COUNT選項,限制返回的數據項數量。比如說,下列查詢返回兩個間隔之間的前10個數據項。使用該選項,你可以像使用SCAN命令一樣迭代數據流: 

  1. XRANGE mystream 1518951123450-0 1518951123460-0 COUNT 10 

如果你不知道查詢的上限或下限,可以將下限換成-、將上限換成+。比如說,下列查詢返回從數據開頭的前10個數據項: 

  1. XRANGE mystream - + COUNT 10 

XREVRANGE的語法類似XRANGE,只是下限和上限的順序倒過來。比如說,下列查詢以相反的順序返回數據流末尾的前10個數據項: 

  1. XREVRANGE mystream + - COUNT 10 

5.在多個消費者之間劃分數據

場景:消費者消費數據的速度遠低于生產者生成數據的速度。

在某些情況下,包括圖像處理、深度學習和情感分析,消費者與生產者相比可能很慢。這種情況下,可以通過分散消費者并劃分每個消費者消耗的數據的做法,來匹配到達數據的速度與消耗數據的速度。

使用Redis Streams,你可以利用消費者組來完成此任務。多個消費者是消費者組的一部分時,Redis Streams將確保每個消費者都收到一組獨有的數據。 

  1. XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMS mystream > 

當然,關于消費者組如何運作還有更多的東西要了解。Redis Streams消費者組旨在劃分數據、實現災難恢復并提供事務數據安全性。

如你所見,Redis Streams很容易上手。只需下載并安裝Redis 5.0,然后鉆研該項目網站上的Redis Streams教程

原文標題:How to use Redis Streams,作者:Roshan Kumar

作者簡介:Roshan Kumar是Redis Labs的資深產品經理。他在軟件開發和技術營銷方面有著豐富的從業經驗。Roshan曾供職于惠普和多家成功的硅谷初創公司,包括ZillionTV、 Salorix、Alopa和ActiveVideo。

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2025-06-05 08:00:00

Go事件驅動系統編程

2022-09-07 08:58:58

Node.js框架

2012-09-06 11:34:15

IBMdw

2010-01-18 17:23:55

函數

2023-12-26 11:56:14

Go通道編程

2022-11-23 08:00:00

開發Regulator調試

2010-02-03 15:40:37

Python函數

2019-11-14 16:23:07

MySQL索引數據庫

2021-03-15 12:23:24

Pythonyield代碼

2010-01-18 17:23:55

函數

2025-07-01 01:00:00

Spring消息系統Redis

2011-04-27 16:38:31

投影機

2015-08-24 09:12:00

Redis 技巧

2010-02-25 10:10:29

WCF使用Header

2010-05-18 15:58:39

MySQL觸發器

2015-03-31 14:15:12

JavaJava事件通知

2020-12-29 05:34:48

Scrapy網頁源代碼

2010-08-26 10:36:44

2020-08-19 08:39:05

中間件前端設計模式

2017-08-30 17:47:35

MySql索引
點贊
收藏

51CTO技術棧公眾號

国产九色在线| 国产精品久久久久aaaa九色| 免费毛片在线看片免费丝瓜视频| 免费在线观看的毛片| 中文字幕精品av| 日韩激情一区二区| 国产小视频免费在线观看| 欧美麻豆久久久久久中文 | 欧美麻豆精品久久久久久| 国产a久久精品一区二区三区| 热这里只有精品| 亚洲第一精品电影| 欧美人成网站| 最新av网站在线观看| 日韩免费av一区二区| 日韩欧美激情四射| 亚洲性受xxx喷奶水| 中文字幕免费高| 久久精品国产96久久久香蕉| 国产精品午夜春色av| 精品久久网站| 黄色成人在线| 99视频精品全部免费看| 欧美理论片在线观看| 亚洲黄色录像片| 亚洲aⅴ天堂av在线电影软件| 超碰97人人做人人爱少妇| jizz一区二区| 欧美大胆性生话| 色女人综合av| 日韩资源av在线| 亚洲人人精品| 91成人免费观看网站| 一区二区三区欧美激情| 一本色道久久| 免费福利视频一区二区三区| 亚洲综合色在线观看| 91久久精品www人人做人人爽| 亚洲国产欧美一区二区三区同亚洲| 99视频一区二区| 日本一区二区免费高清| 国产在线1区| www黄色av| yellow视频在线观看一区二区| 亚洲精品一区二区三区婷婷月| 亚洲视频综合在线| 日韩激情中文字幕| 日韩福利视频一区| 黄色网页在线免费看| 日本wwww视频| 国产在线播放一区二区| 最近更新的2019中文字幕 | v片在线观看| 激情综合网俺也去| 激情小说网站亚洲综合网| 久久成人一区二区| 欧美精品日韩综合在线| 国产亚洲欧洲一区高清在线观看| 亚洲欧美一区在线| 亚洲一区二区av| 国产视频在线看| 久久久噜噜噜www成人网| 高清不卡一区二区三区| 久久亚洲一区二区三区四区五区高 | 91美女蜜桃在线| 国内精品久久久久久久97牛牛| 123成人网| 久色视频在线| 欧美 日韩 国产一区| 国产伦精品一区二区三区高清| 久久99热这里只有精品国产 | 日本伊人色综合网| 国产欧美一区二区三区精品观看| 国产美女高潮在线观看| 绯色av一区| 免费看一级大黄情大片| 久久亚洲高清| 国产精品吊钟奶在线| 色老头一区二区三区| 欧美一区二区日韩一区二区| 亚洲少妇30p| 丁香婷婷深情五月亚洲| 夜夜爽av福利精品导航| av永久不卡| 97se亚洲| 日韩毛片在线| а√资源新版在线天堂| 中国动漫在线观看完整版免费| 国产黄页在线观看| 伊人久久av导航| 国产美女在线精品免费观看| 日本精品一区二区三区在线播放视频 | 欧美黑人巨大videos精品| gay欧美网站| 日本美女在线中文版| 日本a级黄色| 国产精品无码一本二本三本色| 天堂资源在线亚洲资源| 国产欧美一区二区三区在线| 欧美裸体男粗大视频在线观看| 日韩激情视频在线播放| 欧美裸体一区二区三区| 欧美日韩亚洲成人| 亚洲美女在线国产| 国产精品全国免费观看高清 | 亚洲欧洲一区二区在线播放| 成人毛片老司机大片| 日本亚洲三级在线| 国产一级一区二区| 国产专区一区| 欧美日本在线| 伊人青青综合网| 天天av综合| 热久久天天拍国产| 婷婷精品在线观看| 在线日韩成人| 欧美电影院免费观看| 亚洲免费一区| 91精品一区| 视频欧美精品| 日韩一级特黄| 国产精久久一区二区| 粉嫩一区二区三区在线观看| 成人福利片在线| 日韩高清在线| 欧美一区久久久| 久久精品女人天堂av免费观看 | 欧美肥婆姓交大片| 久久精品视频中文字幕| 最近的2019中文字幕免费一页 | 狠狠色综合一区二区| 动漫精品视频| 国产欧美一区二区视频| 99久久伊人精品影院| 国产91免费视频| 久久精品国产精品国产精品污 | 欧美日韩国产免费| 91麻豆精品国产91久久久 | 伊色综合久久之综合久久| 久久久久毛片免费观看| 日韩中文字幕无砖| 日韩一二三区在线观看| 精品视频高潮| 成人同人动漫免费观看| 亚洲一区二区| 国产日韩视频| 国模无码大尺度一区二区三区| 国产精品亚洲一区二区三区在线| 成人动漫一区二区| 国产精品免费视频观看| 亚洲国产裸拍裸体视频在线观看乱了| 欧美日韩黄色大片| 欧美巨大另类极品videosbest | 日韩高清影视在线观看| 欧美精品一区二区久久| 亚洲色图国产| 老司机久久99久久精品播放免费| 久久av老司机精品网站导航| 国产精品1区2区| 久久嫩草精品久久久精品| 亚洲视频一二区| 欧美视频裸体精品| 精品久久人人做人人爱| 在线日韩中文字幕| 亚洲**2019国产| 91久久国产精品| 日本亚洲导航| 国产超级av在线| 无限国产资源| 国产在线1区| 羞羞视频在线观看一区二区| 日本天堂一区| 国产真实久久| 久久精品99国产精品日本| av电影天堂一区二区在线| 伊人色综合久久天天| 欧美日韩一区二区三区四区五区| 精品视频在线播放色网色视频| 久久久久久久久久久av| 91免费在线观看网站| 伊人久久大香线蕉av一区| 第四色婷婷基地| 69久久精品| 天天综合91| 一区二区影视| 成人免费毛片高清视频| 亚洲影视在线观看| 亚洲高清一区二| 88国产精品欧美一区二区三区| 国产精品久久国产三级国电话系列| 日本三日本三级少妇三级66| 91久久精品国产性色| 黄色成人在线| jizz18欧美18| 国产精品尤物| 中日韩av电影| 欧美一级高清大全免费观看| 欧美极品少妇xxxxⅹ裸体艺术| 国产精品一区二区欧美黑人喷潮水| 国产精品12345|