Ohjelmointi

Kuinka käyttää Redis Streamsia

Roshan Kumar on Redis Labsin vanhempi tuotepäällikkö.

Redis, muistin sisäinen monimallitietokanta, on suosittu monissa käyttötapauksissa. Näitä ovat sisällön välimuisti, istuntokaupat, reaaliaikainen analytiikka, viestien välitys ja tietojen suoratoisto. Viime vuonna kirjoitin siitä, miten Redis Pub / Sub-, Lists- ja Lajiteltuja sarjoja käytetään reaaliaikaiseen suoratoistoon. Nyt, kun Redis 5.0 saapuu, Redisillä on upouusi tietorakenne, joka on suunniteltu virtojen hallintaan.

Redis Streams -tietorakenteen avulla voit tehdä paljon enemmän kuin mitä Pub / Sub-, Lists- ja Lajiteltuja sarjoja käytettiin. Monien etujen joukossa Redis Streamin avulla voit tehdä seuraavaa:

  • Kerää suuria määriä dataa, joka saapuu suurella nopeudella (ainoa pullonkaula on verkon I / O);
  • Luo datakanava monien tuottajien ja monien kuluttajien välille.
  • Hallitse tehokkaasti tietojen kulutusta, vaikka tuottajat ja kuluttajat eivät toimisi samalla nopeudella.
  • Pysyvät tiedot, kun kuluttajat ovat offline-tilassa tai katkenneet yhteyden.
  • Viestintä tuottajien ja kuluttajien välillä asynkronisesti;
  • Skaalaa kuluttajien lukumäärä;
  • Toteutetaan tapahtumamainen tietoturva, kun kuluttajat epäonnistuvat tietojen kulutuksen aikana. ja
  • Käytä päämuistiasi tehokkaasti.

Parempi osa Redis Streameista on, että se on sisäänrakennettu Redisiin, joten Redis Streamin käyttöönottoon tai hallintaan ei tarvita ylimääräisiä vaiheita. Tässä artikkelissa opastan sinut Redis Streamin käytön perusteisiin. Tarkastelemme, kuinka voimme lisätä tietoja streamiin ja kuinka voimme lukea nämä tiedot (kaikki kerralla, asynkronisesti, kun ne saapuvat jne.) Tyydyttääkseen kuluttajien erilaiset käyttötapaukset.

Kahdessa tulevassa artikkelissa keskustelen siitä, kuinka Redis Streamin kuluttajaryhmät toimivat, ja näytän toimivan sovelluksen, joka käyttää Redis Streameja.

Ymmärrä Redis Streamin tietovirta

Redis Streams tarjoaa vain liitteenä olevan tietorakenteen, joka näyttää samanlaiselta kuin lokit. Se tarjoaa komentoja, joiden avulla voit lisätä lähteitä virtoihin, kuluttaa virtoja sekä seurata ja hallita tietojen kulutusta. Streamin tietorakenne on joustava, joten voit yhdistää tuottajat ja kuluttajat monin tavoin.

Redis Labs

Kuva 1 havainnollistaa Redis-suoratoistojen peruskäyttöä. Yksittäinen tuottaja toimii tietolähteenä, ja sen kuluttaja on viestisovellus, joka lähettää tietoja asianomaisille vastaanottajille.

Redis Labs

Kuvassa 2 yhteistä datavirtaa kuluttaa useampi kuin yksi kuluttaja. Redis Streamin avulla kuluttajat voivat lukea ja analysoida tietoja omassa tahdissaan.

Seuraavassa kuvassa 3 esitetyssä sovelluksessa asiat muuttuvat hieman monimutkaisemmiksi. Tämä palvelu vastaanottaa tietoja useilta tuottajilta ja tallentaa kaiken Redis Streams -tietorakenteeseen. Sovelluksessa on useita kuluttajia, jotka lukevat Redis Streamin tietoja, sekä kuluttajaryhmä, joka tukee kuluttajia, jotka eivät voi toimia samalla nopeudella kuin tuottajat.

Redis Labs

Lisää tietoja streamiin Redis Streamin avulla

Kuvan 3 kaavio näyttää vain yhden tavan lisätä tietoja Redis-virtaan. Vaikka yksi tai useampi tuottaja voi lisätä tietoja tietorakenteeseen, kaikki uudet tiedot liitetään aina virran loppuun.

Oletustapa tietojen lisäämiseen

Tämä on yksinkertaisin tapa lisätä tietoja Redis-streamiin:

XADD mystream * nimi Anna

XADD mystream * nimi Bert

XADD mystream * nimi Cathy

Tässä komennossa XADD on Redis-komento, mystream on virran nimi, Anna, Bert ja Cathy ovat kullekin riville lisättyjä nimiä, ja * -operaattori käskee Redisin luomaan tunnuksen kullekin riville. Tämä komento tuottaa kolme mystream-merkintää:

1518951481323-0 nimi Cathy

1518951480723-0 nimi Bert

1518951480106-0 nimi Anna

Lisätään tietoja käyttäjän hallinnoimilla tunnuksilla jokaiselle merkinnälle

Redis antaa sinulle mahdollisuuden säilyttää oma tunniste jokaiselle merkinnälle (katso alla). Vaikka tämä saattaa olla hyödyllistä joissakin tapauksissa, on yleensä helpompaa luottaa automaattisesti luotuihin tunnuksiin.

XADD mystream 10000000 nimi Anna

XADD mystream 10000001 -nimi Bert

XADD mystream 10000002 nimi Cathy

Tämä johtaa seuraaviin mystream-merkintöihin:

10000002-0 nimi Cathy

10000001-0 nimi Bert

10000000-0 nimi Anna

Tietojen lisääminen enimmäisrajalla

Voit rajoittaa streamisi enimmäismäärällä merkintöjä:

XADD mystream MAXLEN 1000000 * nimi Anna

XADD mystream MAXLEN 1000000 * nimi Bert

XADD mystream MAXLEN 1000000 * nimi Cathy

Tämä komento häivyttää vanhemmat merkinnät, kun virta on noin 1 000 000.

Vinkki: Redis Streams tallentaa tietoja radix-puun makrosolmuihin. Jokaisessa makrosolmussa on muutama tieto (yleensä muutaman kymmenen alueella). Likimääräisen MAXLEN-arvon lisääminen alla esitetyllä tavalla välttää makrosolmun käsittelyn jokaiselle lisäykselle. Jos muutamilla kymmenillä numeroilla - esim. 1000000 tai 1000050 - ei ole juuri mitään eroa, voit optimoida suorituksesi kutsumalla komennon, jolla on likimerkki (~).

XADD mystream MAXLEN ~ 1000000 * nimi Anna

XADD mystream MAXLEN ~ 1000000 * nimi Bert

XADD mystream MAXLEN ~ 1000000 * nimi Cathy

Kuluta tietoja streamista Redis Streamin avulla

Redis Streams -rakenne tarjoaa runsaan määrän komentoja ja ominaisuuksia tietojen kuluttamiseen monin eri tavoin.

Lue kaikki virran alusta

Tilanne: Striimissä on jo käsiteltävät tiedot, ja haluat käsitellä kaikki alusta alkaen.

Tässä käytettävä komento on XREAD, jonka avulla voit lukea kaikki tai ensimmäiset N merkintää virran alusta. Parhaana käytäntönä on aina hyvä lukea tiedot sivu kerrallaan. Voit lukea enintään 100 merkintää virran alusta komennolla:

XREAD COUNT 100 VIRTAA mystream 0

Olettaen, että 1518951481323-0 on viimeisessä komennossa saamasi kohteen viimeinen tunnus, voit noutaa seuraavat 100 merkintää suorittamalla:

XREAD COUNT 100 VIRTAA mystream 1518951481323-1

Kuluta tietoja asynkronisesti (estopuhelun kautta)

Tilanne: Kuluttajasi kuluttaa ja käsittelee tietoja nopeammin kuin nopeudella, jolla data lisätään streamiin.

On monia käyttötapauksia, joissa kuluttaja lukee nopeammin kuin tuottajat lisäävät tietoja streamisi. Näissä tilanteissa haluat kuluttajan odottavan ja saavan ilmoituksen uusien tietojen saapuessa. BLOCK-vaihtoehdon avulla voit määrittää, kuinka kauan uusien tietojen odottaminen: 

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Täällä XREAD palauttaa kaikki tiedot 1518951123456-1: n jälkeen. Jos sen jälkeen ei ole tietoja, kysely odottaa N = 60 sekuntia, kunnes uutta tietoa saapuu, ja sitten aikakatkaisu. Jos haluat estää tämän komennon loputtomasti, soita XREAD: lle seuraavasti:

XREAD BLOCK 0 STREAMS mystream 1518951123456-1 

Merkintä: Tässä esimerkissä voit myös hakea tietoja sivu kerrallaan käyttämällä XRANGE-komentoa. 

Lue vain uudet tiedot niiden saapuessa

Tilanne: Olet kiinnostunut käsittelemään vain uutta dataa nykyisestä ajankohdasta alkaen.

Kun luet tietoja toistuvasti, on aina hyvä aloittaa uudelleen siitä, mihin jäit. Esimerkiksi edellisessä esimerkissä soitit estopuhelun lukemaan dataa, joka on suurempi kuin 1518951123456-1. Aluksi ei kuitenkaan välttämättä tiedä uusinta henkilötodistusta. Tällaisissa tapauksissa voit aloittaa virran lukemisen $ -merkillä, joka käskee XREAD-komentoa noutamaan vain uusia tietoja. Koska tämä puhelu käyttää BLOCK-vaihtoehtoa 60 sekunnin ajan, se odottaa, kunnes streamissa on joitain tietoja.

XREAD BLOCK 60000 STREAMS mystream $

Tässä tapauksessa aloitat uusien tietojen lukemisen $ -vaihtoehdolla. Sinun ei kuitenkaan pitäisi soittaa seuraavia puheluita $ -vaihtoehdolla. Esimerkiksi, jos 1518951123456-0 on edellisissä puheluissa haettujen tietojen tunnus, seuraavan puhelun tulisi olla:

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Toista virta lukeaksesi aiemmat tiedot

Tilanne: Tietovirrassasi on jo tarpeeksi tietoa, ja haluat kysyä sitä analysoidaksesi tähän mennessä kerätyt tiedot.

Voit lukea kahden merkinnän välisen datan joko eteen- tai taaksepäin käyttämällä vastaavasti XRANGE ja XREVRANGE. Tässä esimerkissä komento lukee tietoja välillä 1518951123450-0 ja 1518951123460-0:

XRANGE mystream 1518951123450-0 1518951123460-0

XRANGE-toiminnolla voit myös rajoittaa palautettavien tuotteiden määrää COUNT-vaihtoehdon avulla. Esimerkiksi seuraava kysely palauttaa ensimmäiset 10 kohdetta kahden aikavälin välillä. Tämän vaihtoehdon avulla voit toistaa virran läpi kuten SCAN-komennolla:

XRANGE mystream 1518951123450-0 1518951123460-0 COUNT 10

Kun et tiedä kyselysi ala- tai ylärajaa, voit korvata alarajan - ja ylärajan +. Esimerkiksi seuraava kysely palauttaa ensimmäiset 10 kohdetta streamisi alusta:

XRANGE mystream - + LASKE 10

XREVRANGE-syntaksi on samanlainen kuin XRANGE, paitsi että käännät ala- ja ylärajan järjestyksen. Esimerkiksi seuraava kysely palauttaa virtauksen lopun 10 ensimmäistä kohdetta käänteisessä järjestyksessä:

XREVRANGE mystream + - LASKE 10

Useamman kuin yhden kuluttajan osiotiedot

Tilanne: Kuluttajat kuluttavat tietojasi paljon hitaammin kuin tuottajat tuottavat niitä.

Tietyissä tapauksissa, mukaan lukien kuvankäsittely, syvällinen oppiminen ja mielipiteiden analyysi, kuluttajat voivat olla hyvin hitaita verrattuna tuottajiin. Näissä tapauksissa sovitat datan saapumisnopeuden kulutettavaan dataan viemällä kuluttajat pois ja jakamalla kuluttamien tietojen osiot.

Redis Streamin avulla voit saavuttaa tämän kuluttajaryhmillä. Kun ryhmään kuuluu useampi kuin yksi kuluttaja, Redis Streams varmistaa, että jokainen kuluttaja saa yksinoikeuden.

XREADGROUP GROUP omaryhmä kuluttaja1 LASKE 2 VIRTAA mystream>

Tietysti on paljon enemmän opittavaa siitä, miten kuluttajaryhmät toimivat. Redis Streamin kuluttajaryhmät on suunniteltu jakamaan tietoja, toipumaan katastrofeista ja tarjoamaan tapahtumadatan turvallisuutta. Selitän kaiken tämän seuraavassa artikkelissani täällä.

Kuten näette, Redis Streamin käytön aloittaminen on helppoa. Lataa ja asenna Redis 5.0 ja sukeltaa Redis Streams -oppaaseen projektin verkkosivustolla.

Roshan Kumar on vanhempi tuotepäällikköRedis Labs. Hänellä on laaja kokemus ohjelmistokehityksestä ja teknologiamarkkinoinnista. Roshan on työskennellyt Hewlett-Packardilla ja monissa menestyvissä Silicon Valley -aloitusyrityksissä, kuten ZillionTV, Salorix, Alopa ja ActiveVideo. Innostuneena ohjelmoijana hän suunnitteli ja kehitti mindzeal.com-verkkoalustaa, joka isännöi tietokoneohjelmointikursseja nuorille opiskelijoille. Roshanilla on kandidaatin tutkinto tietojenkäsittelytieteessä ja MBA Santa Claran yliopistossa.

New Tech Forum tarjoaa mahdollisuuden tutkia ja keskustella kehittyvistä yritysteknologioista ennennäkemättömällä syvyydellä ja laajuudella. Valinta on subjektiivinen, perustuu valitsemiemme tekniikoihin, joiden uskomme olevan tärkeitä ja kiinnostavia lukijoille. ei hyväksy markkinointivakuuksia julkaisua varten ja pidättää oikeuden muokata kaikkea lähetettyä sisältöä. Lähetä kaikki tiedustelut osoitteeseen[email protected].