어느 시스템이던 다운타임으로 인해서 에러가 발생하는것은 보기가 좋지 않다. Redis
의 경우도 마찬가지이다. 기존 KEY
에서 사용중이던 데이터를 삭제 후 새로운 데이터를 넣어야 한다면 2번의 DELETE
Command
와 함께 데이터를 넣는 Command
가 실행이 될것이고, 그러면 두개의 Command
사이에 데이터가 없기 때문에 에러가 발생할 수 있다.
이것을 어떻게 극복할 수 있을까?
간단하게 RENAME 명령어를 통해서 KEY
의 이름을 덮어 쒸울 수 있다.
아래와 같이 진행하면 GREEN
데이터는 사라지지만, BLUE
가 GREEN
이 된다.
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
을 살릴 수 있는 방법이 있을까?
KEY
를 사용하고 있는지 저장하는 KEY
를 하나 더 만든다. 만약 BLUE
, GREEN
두 가지가 있다면, 기준이 되는 SIGN
KEY
에다가 BLUE
또는 GREEN
을 넣어두면 될것이다. 대신 프로그램 로직은 조금 복잡해질것 같다.COPY
명령어를 통해, 기존의 키를 복사한 후 RENAME
으로 덮어쒸운다. 대신 이 방법은 O(N)
의 시간 복잡도가 생기니 고민을 해봐야 할것 같다.하지만 실제로 데이터를 Swap
하는 일은 거의 드물것이고, 이런 데이터의 양 또한 적을것이다. 결국 데이터를 보존하느냐, 마느냐의 차이일것 같다.