이 글에서는 레디스(Redis)에서 키에 저장된 해시(hash) 값의 각 필드에 값을 설정하는 방법을 알아봅니다. 이를 위해 HSET, HSETNX, HMSET 세 가지 명령어를 사용하며, 각 명령어의 문법과 반환값, 실제 동작 예제까지 함께 살펴보겠습니다.
HSET 명령어란?
HSET은 지정된 키에 저장된 해시에서 특정 필드에 값을 설정하는 명령어입니다. 해당 필드가 이미 존재하면 기존 값은 새 값으로 덮어써지며, 키가 존재하지 않으면 설정 작업을 수행하기 전에 해시 값을 담는 새로운 키가 자동으로 생성됩니다.
단, 키가 존재하지만 그 값이 해시 타입이 아니라면 에러가 반환됩니다.
문법
redis host:port> HSET <keyname> <field> <value>
반환값
- 1 (integer): 필드가 해시에 새로 추가되고 값이 설정된 경우 - 0 (integer): 필드가 이미 존재하여 기존 값이 덮어써진 경우 - Error: 키가 존재하지만 저장된 값이 해시 타입이 아닌 경우
실행 예제

HSETNX 명령어란?
HSETNX는 "Hash Set if Not eXists"의 약자로, 지정된 필드가 해시에 존재하지 않는 경우에만 값을 설정합니다. 필드가 이미 존재한다면 이 명령어는 아무런 영향을 주지 않습니다. 키가 존재하지 않으면 마찬가지로 해시를 담는 새 키가 먼저 생성됩니다.
키가 존재하지만 저장된 값이 해시 타입이 아니면 에러가 반환됩니다.
문법
redis host:port> HSETNX <keyname> <field> <value>
반환값
- 1 (integer): 필드가 새로 생성되고 값이 설정된 경우 - 0 (integer): 필드가 이미 존재하여 아무 작업도 수행되지 않은 경우 - Error: 키가 존재하지만 저장된 값이 해시 타입이 아닌 경우
실행 예제

HMSET 명령어란?
HMSET은 한 번의 호출로 여러 개의 필드/값 쌍을 해시에 설정할 수 있는 명령어입니다. 지정한 필드 중 하나라도 이미 존재하면 해당 값은 덮어써지며, 키가 없으면 새 해시 키가 생성됩니다.
참고: HMSET은 Redis 4.0.0부터 공식적으로 권장되지 않습니다(deprecated). 최신 버전의 HSET은 여러 필드/값 쌍을 지원하므로, 새로운 코드에서는 HSET을 사용하는 것이 좋습니다.
문법
redis host:port> HMSET <keyname> <field> <value> [<field> <value>]
반환값
- OK (simple string): 모든 필드/값 쌍이 성공적으로 설정된 경우 - Error: 키가 존재하지만 저장된 값이 해시 타입이 아닌 경우
실행 예제

세 명령어 비교 요약
| 명령어 | 필드 존재 시 동작 | 다중 필드 지원 |
|---|---|---|
| HSET | 기존 값을 덮어씀 | 지원 (4.0.0 이상) |
| HSETNX | 아무 작업도 하지 않음 | 미지원 |
| HMSET | 기존 값을 덮어씀 | 지원 (deprecated) |
참고 자료
- HSET 공식 문서
- HSETNX 공식 문서
- HMSET 공식 문서
지금까지 레디스 데이터스토어에서 해시 값의 필드에 값을 설정하는 HSET, HSETNX, HMSET 명령어에 대해 알아보았습니다. 내용이 도움이 되셨다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!