Redis Key Swap

오길환·2022년 8월 9일
0

어느 시스템이던 다운타임으로 인해서 에러가 발생하는것은 보기가 좋지 않다. Redis의 경우도 마찬가지이다. 기존 KEY에서 사용중이던 데이터를 삭제 후 새로운 데이터를 넣어야 한다면 2번의 DELETE Command와 함께 데이터를 넣는 Command가 실행이 될것이고, 그러면 두개의 Command 사이에 데이터가 없기 때문에 에러가 발생할 수 있다.

이것을 어떻게 극복할 수 있을까?

간단하게 RENAME 명령어를 통해서 KEY의 이름을 덮어 쒸울 수 있다.
아래와 같이 진행하면 GREEN 데이터는 사라지지만, BLUEGREEN이 된다.

SET BLUE 00F
+OK
SET GREEN 0F0
+OK

GET BLUE
00F

Get Green
0F0

RENAME BLUE GREEN
+OK

GET BLUE
-1

GET GREEN
00F

그럼 GREEN을 살릴 수 있는 방법이 있을까?

  1. 어떤 KEY를 사용하고 있는지 저장하는 KEY를 하나 더 만든다. 만약 BLUE, GREEN 두 가지가 있다면, 기준이 되는 SIGN KEY에다가 BLUE 또는 GREEN 을 넣어두면 될것이다. 대신 프로그램 로직은 조금 복잡해질것 같다.
  2. COPY 명령어를 통해, 기존의 키를 복사한 후 RENAME으로 덮어쒸운다. 대신 이 방법은 O(N)의 시간 복잡도가 생기니 고민을 해봐야 할것 같다.

하지만 실제로 데이터를 Swap하는 일은 거의 드물것이고, 이런 데이터의 양 또한 적을것이다. 결국 데이터를 보존하느냐, 마느냐의 차이일것 같다.

0개의 댓글