이 튜토리얼에서는 Redis 데이터 저장소에 저장된 하나의 세트(Set) 값에 있는 요소를 다른 세트 값으로 이동하는 방법을 배워보겠습니다. 이를 위해 redis-cli에서 SMOVE 명령어를 사용합니다.
SMOVE 명령어는 source(원본) 키에 저장된 세트 값에서 지정된 요소를 제거하고, 동일한 요소를 destination(대상) 키에 저장된 세트 값에 추가합니다. 이 연산은 원자적(atomic)으로 수행되기 때문에, 어떤 순간에도 지정된 요소는 반드시 원본 세트 또는 대상 세트 중 하나에만 속해 있게 됩니다.
SMOVE 명령어의 주요 특징
다음과 같은 경우에는 별도의 처리가 이루어집니다.
- source 키에 해당하는 세트 값이 존재하지 않거나, 지정된 요소가 그 세트에 포함되어 있지 않으면 아무 연산도 수행하지 않고 0을 반환합니다.
- 지정된 요소가 destination 키의 세트 값에 이미 존재하는 경우, 요소는 source 세트에서만 제거됩니다.
- source 또는 destination 키가 세트 값을 가지고 있지 않으면 에러가 반환됩니다.
문법
redis host:port> SMOVE <source> <destination> <element>
<source>: 요소를 제거할 원본 세트의 키<destination>: 요소를 추가할 대상 세트의 키<element>: 이동할 요소
반환값
- 1 : 요소가 source에서 destination으로 성공적으로 이동된 경우
- 0 : source 키가 존재하지 않거나, 해당 요소가 source 세트의 멤버가 아닌 경우
- Error : source 또는 destination 키가 세트 값을 가지고 있지 않은 경우
사용 예시

예시 설명
위 예시처럼 SMOVE myset1 myset2 "member" 형태로 실행하면, myset1 세트에서 해당 멤버가 제거되고 myset2 세트에 추가됩니다. 실행 결과로 1이 반환되면 이동이 성공한 것이며, SMEMBERS 명령어로 각 세트의 멤버 목록을 확인해 보면 요소가 실제로 이동했음을 검증할 수 있습니다.
참고 자료
- Redis 공식 문서 – SMOVE Command Docs
지금까지 Redis 데이터 저장소에서 한 세트 값의 요소를 다른 세트 값으로 이동하는 방법을 살펴보았습니다. 이 글이 도움이 되었다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요.