본문 바로가기

Redis

(4)
[Redis] Redis-stream 메모리 누수와 XGROUP의 동작원리 최근 진행하고 있는 프로젝트 Gitanimals에서는 분산된 트랜잭션간의 데이터 정합성을 맞추기위해 redis-stream을 이용해 Saga를 구현하고 있습니다. 메시지 스트림 구현체로 redis-stream을 사용하면서, 내부적으로 redis-stream의 Group을 사용하고 있는데, redis-stream의 Group에 대해서 자세히 설명하고 있는글이 없더라구요. Group의 내부동작을 모른채 사용하면 메모리 누수로까지 이어질 수 있는만큼 중요한 부분이라 생각하기 때문에, 제가 정리하고자 마음을 먹고 글을 작성하게 되었습니다. Redis-stream 개요공식문서에 따르면, redis-stream은 append-only log 와 같이 동작하는 자료구조이지만, 몇가지 기능을 추가로 제공해서 appen..
[Redis] Sentinel failover 테스트 최근에 Redis HA 를 공부하다가, 다음과 같은 의문이 들었습니다. "sentinel구조에서 master 노드가 다운되었을때, failover 과정중 들어오는 데이터들은 어떻게 되지???" 검색을 해봐도 원하는 내용이 설명되어 있는 자료를 찾기 힘들어서 직접 테스트 해보기로 결심했습니다. 구성 구성은 아래와 같습니다. redis-server version : 7.2.1 lettuce core : 6.2.4 monitoring : redis-stat 아래 더보기를 여시면 sentinel 구성파일을 다운받을 수 있습니다. 혹시나 따라하실분은 아래 파일을 다운받아서 사용하시면 될것 같습니다. 더보기 처음에는 편하게 docker로 구성했는데, sentinel에서 master-node ip를 응답하는 과정에서..
[Redis] Cluster 환경에서 Transaction 에러 해결하기 Redis는 기본적으로 원자적으로 동작하지만, 사용하기에 따라 갱신손실의 문제등 정합성이 맞지 않는 문제가 발생할 수 있습니다. 저장하는 구조를 변경해, Redis에서 제공하는 자료구조로 해결할 수 있다면 최고겠지만 그렇지 않다면, Redis에서 제공하는 트랜잭션을 사용해야합니다. 트랜잭션 관련 내용은 다음 글에 설명되어 있습니다. https://dlwnsdud205.tistory.com/354 [Redis] Transaction으로 갱신손실 문제 해결하기 갱신손실 문제 예시 Redis는 기본적으로 원자적으로 동작하지만, 사용에 따라 여러가지 문제가 발생할 수 있다. (단, 레디스에서 제공하는 원자적으로 동작하는 set ... get 등의 메소드를 활용할 수 dlwnsdud205.tistory.com 그..
[Redis] Transaction으로 갱신손실 문제 해결하기 갱신손실 문제 예시 Redis는 기본적으로 원자적으로 동작하지만, 사용에 따라 여러가지 문제가 발생할 수 있습니다. (단, 이 글에서는 레디스에서 제공하는 원자적으로 동작하는 set ... get 등의 메소드를 활용할 수 없는 상황이라 가정하겠습니다.) 아래표는 조회하고 업데이트하는 예시입니다. 이 트랜잭션의 결과는 어떻게 될까요? redis client 1 redis client 2 1 GET 1 -> 1 이 조회됨. 2 GET 1 -> 1 이 조회됨 3 도메인 조건 확인 도메인 조건 확인 4 SET 1 3 5 SET 1 4 실제로 실행해보면, redis client 1 에서 업데이트한 3은 사라진것을 알 수 있습니다. Redis의 각 명령이 원자적으로 동작한다는것이 클라이언트의 요청 sequence도..