2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis on korkean suorituskyvyn avainarvojen tallennusjärjestelmä, ja sen useat tietorakenteet tekevät siitä ihanteellisen valinnan viestijonojen toteuttamiseen. Tässä artikkelissa tutkitaan, kuinka Redisin List-, Pub/Sub- ja Stream-tietorakenteita voidaan käyttää tehokkaan viestijonojärjestelmän toteuttamiseen.
Viestijono on sovellusten välisen viestinnän mekanismi, jonka avulla sovellukset voivat lähettää ja vastaanottaa viestejä asynkronisesti. Sitä käytetään hajautetuissa järjestelmissä palvelukomponenttien erottamiseen ja järjestelmän skaalautuvuuden ja luotettavuuden parantamiseen.
Lista on yksi Rediksen perustietorakenteista ja sitä voidaan käyttää yksinkertaisena viestijonona.
LPUSH
Komento lisää viestin luettelon päähän.BRPOP
Komento estää viestin luettelon lopusta.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub on viestien julkaisu- ja tilausmalli, jonka avulla viestit voidaan toimittaa yhdestä moneen.
PUBLISH
Komento julkaisee viestit määritetylle kanavalle.SUBSCRIBE
Komento tilata kanava ja vastaanottaa viestejä.// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream on Redis 5.0:ssa käyttöön otettu uusi pysyvä tietorakenne, joka on erityisesti suunniteltu viestijono- ja lokitoimintoihin.
XADD
Komento lisää viestin streamiin.XREAD
Komento lukee viestit Streamista.// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));
// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
XADD
Komento lisää viestin streamiin.XREAD
Komento lukee viestit Streamista.XREADGROUP
Komento toteuttaa kuluttajaryhmän toiminnon.Seuraavassa on yksinkertainen Lua-skriptiesimerkki tuottajien ja kuluttajien perustoimintojen toteuttamiseen.
-- 生产者脚本
local function produce(streamKey, message)
local result = redis.call('XADD', streamKey, '*', 'message', message)
return result
end
-- 消费者脚本
local function consume(streamKey, groupName, consumerName)
local result = redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, 0)
return result
end
-- 调用脚本
local streamKey = 'myStream'
local message = 'Hello, Redis Stream!'
local groupName = 'myGroup'
local consumerName = 'myConsumer'
-- 生产消息
local messageId = produce(streamKey, message)
-- 消费消息
local messages = consume(streamKey, groupName, consumerName)
Kuluttajaryhmät ovat Redis Streamin ominaisuus, jonka avulla useat kuluttajaesiintymät voivat koordinoida työtään ja yhdessä kuluttaa viestejä Streamissa.
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
Lua-skriptien ja Redis Streamin käyttäminen viestijonojen toteuttamiseen voi hyödyntää Rediksen korkeaa suorituskykyä ja Lua-skriptien atomiteettia tehokkaan ja luotettavan viestijonojärjestelmän rakentamiseksi. Kuluttajaryhmien ominaisuus parantaa entisestään viestijonojen saatavuutta ja skaalautuvuutta.
Redis tarjoaa useita tapoja toteuttaa viestijonoja, joista jokaisella on soveltuva skenaario. List sopii yksinkertaisiin jonovaatimuksiin, Pub/Sub sopii julkaisu-/tilaustilaan, ja Stream tarjoaa tehokkaampia viestijonotoimintoja, mukaan lukien pysyvyys, kuluttajaryhmät ja muut ominaisuudet.