String
key-value
반면 Lists, Sets, Sorted Sets, Hashes는 일 대 다 관계.
Key/Value Data type: Binary-safe strings
즉, value 뿐만 아니라 key도 위에 언급한 것들을 사용할 수 있다.
key/value maximum length: 512 megabytes
key design
- 적절한 key 사이즈를 유지하는 것이 좋다.
사용자 보기 관점: "user_1000_email"
메모리 절약 관점: "u1000e" - key를 구성할때 단어 사이에 구분자를 사용하는 것이 좋다.
예를 들어 '_' 등을 사용해서 key를 구성하면 쉽게 알아볼 수 있다.
특히, Enterprise 버전에서 SQL(select) 사용을 고려한다면 다른 구분자보다 '_' 사용을 추천.
명령어 요약
- SET(저장): SET, SETNX, SETEX, SETPEX, MSET, MSETNX, APPEND, SETRANGE
- GET(조회): GET, MGET, GETRANGE, STRLEN
- INCR(1씩증가): INCR, DECR, INCRBY, DECRBY, INCRBYFLOAT
1. SET key value
명령> set key value
결과> OK
명령> get key
결과> value
value 부분 띄어쓰기를 포함하려면 ""큰따옴표 사용.
명령> set key "Hello Redis!"
결과> OK
명령> get key
결과> Hello Redis!
같은 key로 SET 명령을 실행하면 이전 value는 지워지고 새로 입력한 value가 남는다.
명령> set key Hello
결과> OK
명령> set key Redis
결과> OK
명령> get key
결과> Redis
겹쳐 쓰기 방지:NX (대/소문자 구분 없이 사용가능. Redis의 모든 옵션들은 대/소 구분 없이 사용가능)
명령> set key1 Hello NX
결과> OK
명령> set key1 Redis NX
결과> (nil)
명령> get key1
결과> Hello
겹쳐질 경우에만 저장: XX
명령> set key2 Hello XX
결과> (nil)
명령> set key2 Hello
결과> OK
명령> set key2 Redis XX
결과> OK
명령> get key2
결과> Redis
지정한 시간 이후 데이터 삭제됨: EX <second> ( timestamp, 밀리초 후 삭제 옵션도 따로있다.)
명령> set key3 Hello EX 5
결과> OK
명령> get key3 1초 후
결과> Hello
명령> get key3 5초 후
결과> (nil)
새 값 넣고 기존 값 반환하기
명령> set key1 value1
결과> OK
명령> set key1 value2 get
결과> value1
명령> get key1
결과> value2
2. DEL key1 : 삭제한 key의 개수를 반환.
명령> set key1 Hello
결과> OK
명령> set key2 Redis
결과> OK
명령> set key3 Server
결과> OK
명령> del key1
결과> 1
명령> del key2 key3
결과> 2
3. GET key1 value
명령> get key4
결과> (nil)
명령> set key4 value
결과> OK
명령> get key4
결과> value
4. 데이터 조회, 만료시간 설정 옵션
- EX: 만료(expire) 시간을 초(second)로 설정.
- PX: 만료(expire) 시간을 밀리초(millisecond)로 설정.
- EXAT: 만료(expire) 시각을 timestamp-seconds로 설정.
- PXAT: 만료(expire) 시각을 timestamp-milliseconds로 설정.
- PERSIST: 만료(expire) 시간/시각을 삭제.
명령> getex key ex 10
결과> value
명령> get key 10초 후
결과> (nil)
GETEX key [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|PERSIST]
5. GETDEL KEY : 데이터 조회 후 삭제 ( 6.2.0 ver 이상 부터 사용가능)
명령> getdel key
결과> value
명령> get key
결과> (nil)
6. incr key : value를 1씩 증가, decr key : value 1씩 감소
명령> incr key
결과> 1
명령> incr key
결과> 2
명령> set key 10
결과> OK
명령> incr key
결과> 11
INCR, DECR ERROR
- 문자에 incr, decr명령어 실행 시
- 정수 값 초과할 경우( 레디스의 정수는 64비트 부호 정수로 범위는 -9,223,372,036,854,775,808(263) ~ 9,223,372,036,854,775,807(263-1) 이다.)
명령> set key Hello
결과> OK
명령> incr key
결과> ERR value is not an integer or out of range
명령> set key 234293482390480948029348230948 숫자가 아닌 문자열로 저장된다.
결과> OK
명령> incr key
결과> ERR value is not an integer or out of range
명령> set key 9223372036854775807 가장 큰 양의 정수 2^63 − 1
결과> OK
명령> incr key
결과> ERR increment or decrement would overflow
7. INCRBY KEY VALUE : 지정한 정수 만큼 value증가 (-10 같은 음수로도 활용가능)
<-> DECRBY KEY VALUE : 지정한 정수 만큼 value감소 (-10 같은 음수로도 활용가능)
명령> incrby key 10
결과> 10
명령> incrby key 20
결과> 30
- incrby key 1.2 같은 정수가 아닌 숫자일 경우 ERR value is not an integer or out of range 에러 발생
8. INCRBYFLOAT key value : 지정한 정수or유리수 만큼 증가.(음수 사용가능)
지정한 value가 없을 경우 0을 기준으로 지정한 숫자 반환
명령> incrbyfloat key 15.6
결과> 15.6
명령> incrbyfloat key 3.3
결과> 18.9
9. SETNX key value : 동일한 key가 없을경우에만 저장됨. ( set key value NX 명령과 같은 동작)
명령> setnx key Hello
결과> 1 (저장 후 1반환)
명령> setnx key Redis
결과> 0 (key로 이미 데이터가 있으므로 저장 실패. 0 반환)
명령> get key
결과> Hello 처음에 저장한 데이터 Hello가 조회됨.
10. SETEX key <seconds> value : 지정한 seconds이후 데이터 삭제
PSETEX key <milliseconds> value : 지정한 milliseconds 이후 데이터 삭제
명령> setex key 5 value
결과> OK
명령> ttl key
결과> 2 (남은 시간을 초(second)로 알려줌)
명령> get key
결과> (nil) (5초가 지나서 데이터가 지워짐)
11. MSET key1 value1 key2 value2 : 여러 데이터를 한번에 저장.
MGET key1 value1 key2 value2 : 여러 데이터를 한번에 조회
명령> mset key1 Hello key2 Redis
결과> OK
명령> get key1
결과> Hello
명령> get key2
결과> Redis
mset 명령은 원자적으로 동작합니다. 일부만 저장되거나 일부만 실패하지 않는다.
12. MSETNX key1 value1 key2 value2 : 여러 데이터를 한번에 저장.
단, 기존에 key가 없어야 한다. 여러 키중 하나라도 존재한다면 전부 저장되지 않음.
명령> msetnx key1 Hello key2 Redis
결과> 1
명령> msetnx key2 XXXXX key3 Server
결과> 0 (key2에 이미 데이터가 있으므로 저장 실패)
명령> mget key1 key2 key3
결과> 1) Hello
2) Redis
3) (nil)
13. APPEND key value : 기존 키값에 있는 value에 신규 value를 추가. ( version 2.0.0 부터 사용가능)
명령> set key1 Hello
결과> OK
명령> append key1 Redis
결과> 10
명령> get key1
결과> HelloRedis
명령> append key2 "Hello World" (기존에 없는 key일 경우에는 데이터를 저장. = set)
결과> 11
명령> get key2
결과> Hello World
14. STRLEN key : 해당 키의 value값 길이를 반환.
명령> set key value
결과> OK
명령> strlen key
결과> 5
명령> append key 1234567890
결과> 15
명령> get key
결과> value1234567890
명령> strlen key
결과> 15
15. SETRANGE key <value offset(index)> <input value> : 지정 위치에 value로 변환
offset은 0부터 시작하고 음수를 사용할 수 없다.
명령> set key "This is MySQL Server"
결과> OK
명령> setrange key 8 Redis
결과> 20
명령> get key
결과> This is Redis Server
=>지정한 offset 8부터 Redis를 넣고 기존 MySQL값을 덮어씌워서 This is Redis Server를 반환
16. GETRANGE key <start> <end> : 시작과 끝offset의 value를 반환 (version 2.4.0 부터 사용가능)
명령> set key "This is Redis Server"
결과> OK
명령> getrange key 0 3
결과> This
명령> getrange key 8 12
결과> Redis
명령> getrange key 8 100
결과> Redis Server
음수 사용 가능!! (마지막 문자는 -1부터 시작)
명령> getrange key -6 -1
결과> Server
명령> getrange key 0 -1 (모든 데이터 조회는 0 -1을 지정)
결과> This is Redis Server
17. STRALGO LCS strings value1 value2 : 두 문자열이 얼마나 유사한지 평가
STRALGO LCS KEYS key1 key2
(version 6.0.0 부터 사용가능)
LCS(Longest Common Subsequence) 알고리즘
시간 복잡도 : O(N*M) (첫문자열길이*두번째문자열길이)
명령> stralgo lcs strings ohmytext mynewtext
결과> "mytext"
명령> stralgo lcs keys key1 key2
결과> "mytext"
명령> stralgo lcs keys key1 key2 len
결과> 6
명령> stralgo lcs keys key1 key2 idx
결과> 1) "matches"
2) 1) 1) 1) (integer) 4
2) (integer) 7
2) 1) (integer) 5
2) (integer) 8
2) 1) 1) (integer) 2
2) (integer) 3
2) 1) (integer) 0
2) (integer) 1
3) "len"
4) (integer) 6
명령> stralgo lcs keys key1 key2 idx minmatchlen 4
결과> 1) "matches"
2) 1) 1) 1) (integer) 4
2) (integer) 7
2) 1) (integer) 5
2) (integer) 8
3) "len"
4) (integer) 6
명령> stralgo lcs keys key1 key2 idx minmatchlen 4 withmatchlen
결과> 1) "matches"
2) 1) 1) 1) (integer) 4
2) (integer) 7
2) 1) (integer) 5
2) (integer) 8
3) (integer) 4
3) "len"
4) (integer) 6
STRALGO LCS [STRINGS ...] [KEYS ...] [LEN] [IDX] [MINMATCHLEN <len>] [WITHMATCHLEN]
18. GETSET key value : 조회와 저장 한번에 수행
getset명령어는 원자성 보장!
명령> incr key
결과> 100
명령> getset key 0
결과> 100
명령> incr key
결과> 1
Redis 6.2 버전에서 SET 명령에 GET 옵션이 추가되었습니다. GETSET 명령과 동일하게 작동합니다.
GETSET 명령은 향후 사용되지 않을(deprecated)거라고 합니다.
'Redis' 카테고리의 다른 글
Redis - Sets (0) | 2024.06.16 |
---|---|
Redis - Lists 데이터 타입, 명령어 (3) | 2024.06.16 |
Redis - 수정중 6 (0) | 2024.06.15 |
Redis - 수정중 5 (0) | 2024.06.15 |
Redis - 수정중 4 (0) | 2024.06.15 |