set
SET
레디스 개발자 교육 신청 |
레디스 정기점검/기술지원 Redis Technical Support |
레디스 엔터프라이즈 서버 Redis Enterprise Server |
---|
저장
set은 데이터를 저장하는 명령입니다. 사용법은 set key value입니다.
get은 저장된 데이터를 가져오는 명령입니다.
Example
명령> | set key value |
결과> | OK |
명령> | get key |
결과> | value |
큰따옴표 사용
value 부분에서 띄어쓰기를 하려면 큰따옴표를 사용합니다.
Example
명령> | set key "Hello Redis!" |
결과> | OK |
명령> | get key |
결과> | Hello Redis! |
겹쳐쓰기
같은 key로 SET
명령을 실행하면 이전 value는 지워지고 새로 입력한 value가 남습니다.
겹쳐쓰기를 하지 않으려면 NX 옵션을 사용합니다. NX, XX, EX, PX 옵션은 버전 2.6.12에서 추가되었습니다. |
겹쳐쓰기 방지: NX
NX
옵션을 사용하면 데이터베이스에 같은 키가 없을 경우에만 저장됩니다.
NX
옵션은 lock 처리에 주로 사용합니다.
왜냐하면 단일 명령으로 데이터가 있는지 확인하고 저장까지 할 수 있기 때문입니다.
NX 옵션은 대.소문자 구분 없이 사용가능합니다. 첫 번째 명령은 데이터베이스에 key1이 없으므로 데이터가 정상적으로 저장되었습니다. 두 번째 명령은 첫 번째 명령이 실행되어 key1이 저장되어 있으므로 (nil)을 리턴합니다. 이 옵션은 SETNX 명령과 같은 동작을 합니다. |
데이터베이스에 이미 키가 있을 경우에만 저장: XX
XX
옵션은 지정한 키가 이미 데이터베이스에 있을 경우에만 저장됩니다.
Example
명령> | set key2 Hello XX |
결과> | (nil) |
명령> | set key2 Hello |
결과> | OK |
명령> | set key2 Redis XX |
결과> | OK |
명령> | get key2 |
결과> | Redis |
레디스의 모든 옵션은 대.소문자 구분 없이 사용가능합니다. XX 옵션을 사용한 첫 번째 명령은 데이터베이스에 key2가 없으므로 데이터가 저장되지 않습니다. 두 번째는 XX 옵션을 사용하지 않았으므로 저장됩니니다. 세 번째는 데이터베이스에 key2가 있으므로 정상적으로 저장됩니다. |
지정한 시간 이후에 데이터 지워짐: EX <초 단위 지정>
EX 초(second) 옵션은 지정한 초 이후에 데이터가 지워집니다.
만료 시간을 갖는 데이터를 저장할 때 유용하게 쓰입니다.
이 옵션은 SETEX 명령과 같은 동작을 합니다. |
지정한 시간 이후에 데이터 지워짐: PX <1/1000초 단위 지정>
PX 밀리초(millisecond) 옵션은 지정한 밀리초 이후에 데이터가 지워집니다.
세밀한 만료 시간을 지정할 때 사용합니다.
Example
명령> | set key3 Hello PX 5000 |
결과> | OK |
명령> | get key3 1초 후 |
결과> | Hello |
명령> | get key3 5초 후 |
결과> | (nil) |
이 옵션은 PSETEX 명령과 같은 동작을 합니다. |
지정한 시각(timestamp,초) 이후에 데이터 지워짐: EXAT <timestamp>
EXAT 시각(timestamp,초) 옵션은 지정한 시각 이후에 데이터가 지워집니다.
만료 시간을 갖는 데이터를 저장할 때 유용하게 쓰입니다.
Redis 6.2 버전에서 추가되었습니다.
지정한 시각(milliseconds-timestamp,밀리초) 이후에 데이터 지워짐: PXAT <milliseconds-timestamp>
PXAT 시각(milliseconds-timestamp,초) 옵션은 지정한 시각 이후에 데이터가 지워집니다.
만료 시간을 갖는 데이터를 저장할 때 유용하게 쓰입니다.
Redis 6.2 버전에서 추가되었습니다.
만료 시간(expire time) 유지: KEEPTTL
SET 명령은 기본으로 만료 시간(expire time)을 지웁니다.
KEEPTTL 옵션을 사용하면 만료 시간을 지우지 않습니다.
이 옵션은 다음과 같이 특별한 경우에 사용하기 위해서 만들었습니다.
INCRBYFLOAT 명령이 실행되면 AOF에는 SET 명령으로 변경되어 기록되고
이전에 만료 시간이 설정되어 있었다면 지워집니다.
이런 경우 KEEPTTL 옵션을 사용해서 만료 시간이 지워지지 않도록 하는데 사용됩니다.
Example
명령> | set key4 10 ex 100
AOF: SET key4 10, PEXPIREAT key4 1579954223443 |
결과> | OK |
명령> | incrbyfloat key4 10 AOF: SET key 20 KEEPTTL |
결과> | 20 |
명령> | SHUTDOWN -> RESTART |
명령> | ttl key4 restart 후에도 expire time이 유지된다. |
결과> | 25 |
6.0-r1에서는 INCRBYFLOAT를 SET KEEPTTL로 변경하는 부분은 되어있으나
명령을 실제 기록하는 aof.c feedAppendOnlyFile()에서 SET 명령 처리하는 부분이
수정되지 않아서 KEEPTTL이 AOF에 기록되지 않는다.
SET key value KEEPTTL 명령도 AOF에 SET key value만 기록된다. 이 문제는 6.0.5(2020년 6월 9일 발표)에서 해결되었습니다. |
새 값은 넣고 기존 값은 가져오기: GET
이 옵션은 6.2에 추가되었습니다.
이제, 기존 GETSET 명령을 사용하지 마시고 이 옵션 사용을 권장합니다.
Example
명령> | set key1 value1 |
결과> | OK |
명령> | set key1 value2 get |
결과> | value1 |
명령> | get key1 |
결과> | value2 |
명령문
SET key value [NX|XX] [EX 초] [PX 밀리초] [EXAT timestamp] [PXAT milliseconds-timestamp] [KEEPTTL] [GET]
- 이 명령은 version 1.0.0 부터 사용할 수 있습니다.
- NX, XX, EX, PX 옵션은 버전 2.6.12에서 추가되었습니다.
- KEEPTTL 옵션은 버전 6.0에서 추가되었습니다.
- EXAT, PXAT, GET 옵션은 버전 6.2에서 추가되었습니다.
- 논리적 처리 소요시간은 O(1)입니다.
SQL Insert | Redis Enterprise 7.3.0 이상이면 INSERT를 사용해보세요. |
관련 명령 | SETNX, SETEX, PSETEX, TTL, PTTL, MSET, APPEND |
Clients for Java | Jedis, Lettuce, Redisson | Clients for C | Hiredis |
<< STRINGS | SET | SETS >> |
---|