Redis에서는 MSET과 MSETNX 명령어를 활용해 여러 문자열 값을 각각의 키에 한 번의 호출로 저장할 수 있습니다. 이 글에서는 두 명령어의 동작 방식, 문법, 반환값 그리고 실전 예제까지 자세히 살펴보겠습니다.
MSET 명령어란?
MSET은 여러 개의 문자열 값을 지정된 키들에 각각 설정하는 명령어입니다. 지정한 키 중 하나라도 이미 존재한다면, 키의 타입과 관계없이 기존 값이 새로운 값으로 덮어써지며(overwrite), 해당 키에 설정되어 있던 만료 시간(TTL)도 함께 제거됩니다.
MSET은 원자적(atomic)으로 동작합니다. 즉, 모든 키가 한 번에 동시에 설정되므로 실행 도중 일부 키만 적용되는 상황은 발생하지 않으며, 이 명령어는 실패하지 않습니다.
문법
redis host:post> MSET <keyname-1> <value-1> <keyname-2> <value-2> <keyname-3> <value-3>
반환값
- (string) OK : 모든 키가 성공적으로 설정되었을 때 반환됩니다.
실행 예제

MSETNX 명령어란?
MSETNX(MSET if Not eXists) 역시 여러 문자열 값을 지정된 키들에 설정하는 명령어입니다. 다만 MSET과 달리, 지정한 키 중 하나라도 이미 존재하면 전체 작업이 실패하며 어떤 키도 설정되지 않습니다.
MSETNX 역시 원자적으로 동작하기 때문에, 클라이언트 입장에서는 일부 키만 업데이트되고 나머지는 그대로인 중간 상태를 결코 볼 수 없습니다.
문법
redis host:post> MSETNX <keyname-1> <value-1> <keyname-2> <value-2> <keyname-3> <value-3>
반환값
- 1 : 작업이 성공하여 모든 문자열 값이 설정된 경우 - 0 : 작업이 실패한 경우 (키 중 최소 하나가 이미 존재하며, 어떤 값도 설정되지 않음)
실행 예제

MSET과 MSETNX의 핵심 차이점
- 기존 키 처리 방식: MSET은 기존 키가 있으면 타입과 관계없이 무조건 덮어쓰지만, MSETNX는 기존 키가 하나라도 있으면 아무것도 설정하지 않습니다.
- 반환값: MSET은 항상 OK를 반환하지만, MSETNX는 성공 시 1, 실패 시 0을 반환합니다.
- 활용 사례: 단순 대량 쓰기에는 MSET이 적합하고, 기존 데이터를 절대 덮어쓰지 않아야 하는 조건부 저장에는 MSETNX가 적합합니다.
참고 자료
- MSET 명령어 공식 문서 (Redis Docs)
- MSETNX 명령어 공식 문서 (Redis Docs)
지금까지 Redis에서 MSET, MSETNX 명령어를 사용해 여러 문자열 값을 각각의 키에 설정하는 방법을 알아보았습니다. 두 명령어의 차이점만 잘 기억하면 대량 데이터 처리와 조건부 쓰기를 안전하게 구현할 수 있습니다. 글이 유익했다면 댓글로 의견을 남겨주시고, 주변에도 공유해 주세요!