나는 이름 바꾸기 명령을 실행하면, 나는이 같은 무언가를 생각하는, 이전의 이름에 대한 Redis에서 Rename으로 데이터를 항상 사용할 수 있습니까?
- 를 사용하여 새 이름
- 된 데이터를 제거 (시간이 좀 경우 걸릴 수 있습니다 대형)
이 데이터에 액세스하는 클라이언트의 경우 이러한 경우가 있습니까?
- 의 핵심은 데이터가 레디 스의 이름을 변경 명령을 실행하는 동안 수행되는 어떤 단계
액세스
나는 이름 바꾸기 명령을 실행하면, 나는이 같은 무언가를 생각하는, 이전의 이름에 대한 Redis에서 Rename으로 데이터를 항상 사용할 수 있습니까?
이 데이터에 액세스하는 클라이언트의 경우 이러한 경우가 있습니까?
액세스
Redis에는 단일 스레드 실행 명령이 있기 때문에 이름 바꾸기는 원자 단위이므로 1과 2에 대한 대답은 아니오입니다. "이전 데이터 제거"에 대한 것은 대상 키가 이미 삭제해야하는 큰 구조를 가리키고있는 경우에만 해당됩니다 (Redis가이를 제거합니다). 원래 데이터 객체는 복사되지 않습니다. 이를 가리키는 해시 테이블 항목 만 이동 될 수 있습니다. Redis에서 다시 해싱하는 것이 점진적이기 때문에 이는 본질적으로 일정한 시간이어야합니다.
Redis는 단일 스레드 명령 실행으로 인해 느린 명령에서 항상 "멈춤"합니다. 그래서 3을 위해, 당신이하고있는 일에 따라 항상 yes 일 수 있습니다. 그러나이 경우에는 엄청나게 큰 암시 적 삭제를 할 때만 가능합니다.
편집 : Redis 4.0에서 구성 옵션 lazyfree-lazy-server-del yes
(기본값은 no
)을 실제로 지정할 수 있으며 서버는 실제로 이와 같은 부작용 삭제를 위해 비동기 적으로 삭제합니다. 즉, 차단을 삭제하는 대신 개체를 백그라운드 삭제 대기열에 넣습니다. 이것은 효과적으로 RENAME
일정 시간을 만들 것입니다. 샘플 cfg 참조 : https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf