<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>soora_genius.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 09 Aug 2022 15:11:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. soora_genius.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/soora_genius" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Redis Key Swap]]></title>
            <link>https://velog.io/@soora_genius/Redis-Key-Swap</link>
            <guid>https://velog.io/@soora_genius/Redis-Key-Swap</guid>
            <pubDate>Tue, 09 Aug 2022 15:11:13 GMT</pubDate>
            <description><![CDATA[<p>어느 시스템이던 다운타임으로 인해서 에러가 발생하는것은 보기가 좋지 않다. <code>Redis</code>의 경우도 마찬가지이다. 기존 <code>KEY</code>에서 사용중이던 데이터를 삭제 후 새로운 데이터를 넣어야 한다면 2번의 <code>DELETE</code> <code>Command</code>와 함께 데이터를 넣는 <code>Command</code>가 실행이 될것이고, 그러면 두개의 <code>Command</code> 사이에 데이터가 없기 때문에 에러가 발생할 수 있다.</p>
<p>이것을 어떻게 극복할 수 있을까?</p>
<p>간단하게 RENAME 명령어를 통해서 <code>KEY</code>의 이름을 덮어 쒸울 수 있다.
아래와 같이 진행하면 <code>GREEN</code> 데이터는 사라지지만, <code>BLUE</code>가 <code>GREEN</code>이 된다.</p>
<pre><code>SET BLUE 00F
+OK
SET GREEN 0F0
+OK

GET BLUE
00F

Get Green
0F0

RENAME BLUE GREEN
+OK

GET BLUE
-1

GET GREEN
00F</code></pre><p>그럼 <code>GREEN</code>을 살릴 수 있는 방법이 있을까?</p>
<ol>
<li>어떤 <code>KEY</code>를 사용하고 있는지 저장하는 <code>KEY</code>를 하나 더 만든다. 만약 <code>BLUE</code>, <code>GREEN</code> 두 가지가 있다면, 기준이 되는 <code>SIGN</code> <code>KEY</code>에다가 <code>BLUE</code> 또는 <code>GREEN</code> 을 넣어두면 될것이다. 대신 프로그램 로직은 조금 복잡해질것 같다.</li>
<li><code>COPY</code> 명령어를 통해, 기존의 키를 복사한 후 <code>RENAME</code>으로 덮어쒸운다. 대신 이 방법은 <code>O(N)</code>의 시간 복잡도가 생기니 고민을 해봐야 할것 같다.</li>
</ol>
<p>하지만 실제로 데이터를 <code>Swap</code>하는 일은 거의 드물것이고, 이런 데이터의 양 또한 적을것이다. 결국 데이터를 보존하느냐, 마느냐의 차이일것 같다.</p>
]]></description>
        </item>
    </channel>
</rss>