내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis는 고성능 키-값 스토리지 시스템이며, 다양한 데이터 구조로 인해 메시지 대기열 구현에 이상적인 선택입니다. 이 기사에서는 Redis의 List, Pub/Sub 및 Stream 데이터 구조를 사용하여 효율적인 메시지 대기열 시스템을 구현하는 방법을 살펴봅니다.
메시지 큐는 애플리케이션이 메시지를 비동기적으로 보내고 받을 수 있도록 하는 애플리케이션 간의 통신 메커니즘입니다. 분산 시스템에서 서비스 구성 요소를 분리하고 시스템의 확장성과 안정성을 향상시키는 데 사용됩니다.
목록은 Redis의 기본 데이터 구조 중 하나이며 간단한 메시지 대기열로 사용할 수 있습니다.
LPUSH
이 명령은 메시지를 목록의 헤드에 삽입합니다.BRPOP
이 명령은 목록 끝의 메시지를 차단합니다.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub는 일대다 메시지 전송을 달성할 수 있는 메시지 게시 및 구독 모델입니다.
PUBLISH
이 명령은 지정된 채널에 메시지를 게시합니다.SUBSCRIBE
채널을 구독하고 메시지를 수신하는 명령입니다.// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream은 메시지 큐 및 로깅 기능을 위해 특별히 설계된 Redis 5.0에 도입된 새로운 영구 데이터 구조입니다.
XADD
명령은 스트림에 메시지를 추가합니다.XREAD
명령은 Stream에서 메시지를 읽습니다.// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));
// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
XADD
명령은 스트림에 메시지를 추가합니다.XREAD
명령은 Stream에서 메시지를 읽습니다.XREADGROUP
이 명령은 소비자 그룹의 기능을 구현합니다.다음은 생산자와 소비자의 기본 작업을 구현하는 간단한 Lua 스크립트 예제입니다.
-- 生产者脚本
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)
소비자 그룹은 여러 소비자 인스턴스가 작업을 조정하고 스트림에서 메시지를 공동으로 소비할 수 있도록 하는 Redis Stream의 기능입니다.
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
Lua 스크립트와 Redis Stream을 사용하여 메시지 대기열을 구현하면 Redis의 고성능과 Lua 스크립트의 원자성을 최대한 활용하여 효율적이고 안정적인 메시지 대기열 시스템을 구축할 수 있습니다. 소비자 그룹 기능은 메시지 대기열의 가용성과 확장성을 더욱 향상시킵니다.
Redis는 메시지 대기열을 구현하는 다양한 방법을 제공하며 각 방법에는 적용 가능한 시나리오가 있습니다. List는 간단한 대기열 요구 사항에 적합하고 Pub/Sub는 게시/구독 모드에 적합하며 Stream은 지속성, 소비자 그룹 및 기타 기능을 포함하여 보다 강력한 메시지 대기열 기능을 제공합니다.