Redis/Spring Data Redis

[Spring Data Redis] Streams

오늘도개발 2024. 5. 14. 10:34

 

1. Streams 란

 

  - 이벤트 저장소

 

 

* 다음 게시글 참조

https://kjwit.tistory.com/entry/Redis-Streams

 

[Redis] Streams

1. Redis Streams 란?  -  Append only log 구조  - 이벤트 저장  - 개인 알림 데이터 저장  2. Redis Streams 사용 방법  -  XADD 로 데이터 저장 ( XADD [key] [entryId] [field] [value] )> XADD mystream * message "abc" "def" "

kjwit.tistory.com

 

 

 

2. Streams  사용 방법 

 

 - chatRoomEventListener 생성

 

public class ChatRoomEventListener implements StreamListener<String, MapRecord<String, String, String>> {

    @Override
    public void onMessage(MapRecord<String, String, String> message) {
        Map<String, String> map = message.getValue();
    }
}

 

 

 

- chatRoomService 생성 ( 알림 생성 역할 )

 

@Service
@RequiredArgsConstructor
public class ChatService {
 
    private final RedisTemplate<String,String> redisTemplate;
    
    public void sendMessage(String chatRoomName, String userId, String msg){

        Map<String, String> fieldMap = new HashMap<>();
        fieldMap.put("roomId", chatRoomName);
        fieldMap.put("userId", userId);
        fieldMap.put("massage", msg);
        redisTemplate.opsForStream().add("chat-room-events", fieldMap);
    }
}

 

 

 

- redis 에서 Stream 생성 

 

XGROUP CREATE chat-room-events chat-room-service-group $ MKSTREAM

 

 

 

 - redisConfig 에 다음을 추가

 

@Bean
    public Subscription subscription(RedisConnectionFactory factory){
        StreamMessageListenerContainer.StreamMessageListenerContainerOptions options = StreamMessageListenerContainer.StreamMessageListenerContainerOptions
                .builder()
                .pollTimeout(Duration.ofSeconds(1))
                .build();
        StreamMessageListenerContainer listenerContainer = StreamMessageListenerContainer.create(factory, options);

        Subscription subscription = listenerContainer.receiveAutoAck(Consumer.from("chat-room-service-group", "instance-1"), StreamOffset.create("chat-room-events", ReadOffset.lastConsumed()), chatRoomEventListener);

        listenerContainer.start();

        return subscription;
    }

 

 

 

'Redis > Spring Data Redis' 카테고리의 다른 글

[Spring Data Redis] Redis Pub / Sub  (0) 2024.05.14
[Spring Data Redis] HyperLogLog  (0) 2024.05.13
[Spring Data Redis] Sorted Sets  (0) 2024.05.13
[Spring Data Redis] Hashes  (0) 2024.05.13
[Spring Data Redis] Sets  (0) 2024.05.13