개요
Redis에서 기본적으로 문자열, 숫자를 저장할 때 사용하는 자료구조이다. Key와 Value 모두 최대 길이가 512MB이다. 그렇다고, Key를 표기할 때 과다하게 길이가 길면 메모리 낭비가 발생한다. 프로그램내에서만 사용하는 로컬변수가 아니라, 여러 서비스에서 공통으로 사용하는 공간인 만큼, Key를 부여할 때, 적절한 가시성과 구분자를 섞어서 쓰는 편이 좋을 것이다. (예: "user_service:member:status")
명령어
주로 어떤 값을 설정하고, 조회하는 용도가 대부분이다. 특히 숫자형 데이터라면 증/감의 오퍼레이션도 지원된다.
set
127.0.0.1:6379> help set
SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]
summary: Set the string value of a key
since: 1.0.0
group: string
set 명령어는 가장 기본형은 set key value를 지정하는 형태이다. 그러나 뒤에 여러 옵션을 지정하여 원하는 유스케이스를 충족시킬 수 있다.
// 기본형
127.0.0.1:6379> set hello world
OK
옵션들)
- EX seconds: 만료 TTL을 s로 지정
// TTL을 10초로 지정
127.0.0.1:6379> set hello world ex 10
OK
// 10초 이내
127.0.0.1:6379> get hello
"world"
// 10초 이후 (TTL 경과)
127.0.0.1:6379> get hello
(nil)
- PX milliseconds: 만료 TTL을 ms로 지정
// TTL을 1000ms로 지정
127.0.0.1:6379> set hello world px 10000
OK
// 1000ms 이내
127.0.0.1:6379> get hello
"world"
// 1000ms 이후 (TTL 경과)
127.0.0.1:6379> get hello
(nil)
- EXAT timestamp-seconds: 만료 TTL을 unix time 기준 s로 지정
- PXAT timestamp-milliseconds: 만료 TTL을 unix time 기준 ms로 지정
- NX: 지정한 키가 존재하지 않을 때만 설정 (insert)
// hello 키가 설정되어 있을 경우
127.0.0.1:6379> set hello world nx
(nil)
// hello 키가 설정되어 있지 않을 경우
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> set hello world nx
OK
- XX: 지정한 키가 존재할 때만 설정 (update)
# hello 키가 설정되어 있지 않을 경우
127.0.0.1:6379> set hello world xx
(nil)
# hello 키가 설정되어 있을 경우
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set hello world2 xx
OK
127.0.0.1:6379>
- KEEPTTL
- GET
// 기존 값이 v1이고, 신규 값이 v2면
// v2로 변경하여 저장하고, 리턴은 v1으로 한다.
127.0.0.1:6379> set hello world get
(nil)
127.0.0.1:6379> get hello
"world"
set
~
get 명령은 기존의 getset과 동일하다.
setnx, setex, getset, psetex
위의 명령어들은 기존의 set 명령어 옵션으로 대체가 가능하다.
- setnx = set ~ nx
- setex = set ~ ex
- getset = set ~ get
- psetex = set ~ px
get
127.0.0.1:6379> help get
GET key
summary: Get the value of a key
since: 1.0.0
group: string
get 명령이 우선 단순하므로, get 부터 살펴보면 위와 같이 get 다음에 조회할 키를 지정해 주면 된다.
// 조회할 키가 설정되지 않은 경우
127.0.0.1:6379> get hello
(nil)
// 조회할 키가 설정된 경우
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
getex
GETEX key [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|PERSIST]
summary: Get the value of a key and optionally set its expiration
since: 6.2.0
group: string
set의 옵션처럼 만료 시점을 지정할 수 있다. 즉, 값을 조회하고 일정 기간 이후 데이터가 expire하도록 설정 가능하다.
// ttl을 10초로 설정
127.0.0.1:6379> getex k1 ex 10
"hello"
// 10초 후
127.0.0.1:6379> get k1
(nil)
append
127.0.0.1:6379> help append
APPEND key value
summary: Append a value to a key
since: 2.0.0
group: string
기존에 존재하는 key에 value를 덧붙인다. 만약, key가 존재하지 않으면 신규 설정한다.
// 일반 string
127.0.0.1:6379> set k1 "hello world"
OK
// string으로 선언하고,
127.0.0.1:6379> set k2 "hello"
OK
// 선언한 string에 append하기
127.0.0.1:6379> append k2 " world"
(integer) 11
// string으로 직접 설정한 것과 append한 것의 메모리 크기 비교 (append를 하면 메모리가 더 많이 소모됨)
127.0.0.1:6379> memory usage k1
(integer) 69
127.0.0.1:6379> memory usage k2
(integer) 88
// 존재하지 않는 key로 append를 직접하는 경우
127.0.0.1:6379> append k3 "test"
(integer) 4
del
127.0.0.1:6379> help del
DEL key [key ...]
summary: Delete a key
since: 1.0.0
group: generic
저장된 키를 삭제한다.
mset, mget
만약 여러 개의 값을 읽거나, 쓸 때 이 연산이 atomic 해야 하면 이 명령어를 쓸 수 있다.
// 여러 데이터를 한 번에 읽을 때
127.0.0.1:6379> help mget
MGET key [key ...]
summary: Get the values of all the given keys
since: 1.0.0
group: string
// 여러 데이터를 한 번에 쓸 때
127.0.0.1:6379> help mset
MSET key value [key value ...]
summary: Set multiple keys to multiple values
since: 1.0.1
group: string
위의 명령어를 사용하여 데이터를 한 번에 저장하고 읽어보면 아래와 같다.
// 한 번에 여러 개의 값을 지정하기
127.0.0.1:6379> mset city seoul nation korea weather rainy
OK
// 하나씩 읽기
127.0.0.1:6379> get city
"seoul"
127.0.0.1:6379> get nation
"korea"
127.0.0.1:6379> get weather
"rainy"
// 한 번에 여러 개의 값을 읽기
127.0.0.1:6379> mget city nation weather
1) "seoul"
2) "korea"
3) "rainy"
strlen
127.0.0.1:6379> help strlen
STRLEN key
summary: Get the length of the value stored in a key
since: 2.2.0
group: string
key를 파라미터로 받아, key에 해당하는 value의 길이를 리턴한다.
// 문자열 지정
127.0.0.1:6379> set k1 "hello world"
OK
127.0.0.1:6379> set k2 "hi there"
OK
// 문자열 길이 확인
127.0.0.1:6379> strlen k1
(integer) 11
127.0.0.1:6379> strlen k2
(integer) 8
getrange, setrange
// substring
127.0.0.1:6379> help getrange
GETRANGE key start end
summary: Get a substring of the string stored at a key
since: 2.4.0
group: string
// replace
127.0.0.1:6379> help setrange
SETRANGE key offset value
summary: Overwrite part of a string at key starting at the specified offset
since: 2.2.0
group: string
스트링 연산에서의 substring 및 replace와 동일한 연산이다.
127.0.0.1:6379> get hello
"world2"
// getrange
127.0.0.1:6379> getrange hello 2 4
"rld"
// setrange
127.0.0.1:6379> setrange hello 3 abc
(integer) 6
127.0.0.1:6379> get hello
"worabc"
incr, decr, incrby, decrby, incrbyfloat
127.0.0.1:6379> help incr
INCR key
summary: Increment the integer value of a key by one
since: 1.0.0
group: string
127.0.0.1:6379> help decr
DECR key
summary: Decrement the integer value of a key by one
since: 1.0.0
group: string
127.0.0.1:6379> help incrby
INCRBY key increment
summary: Increment the integer value of a key by the given amount
since: 1.0.0
group: string
127.0.0.1:6379> help decrby
DECRBY key decrement
summary: Decrement the integer value of a key by the given number
since: 1.0.0
group: string
127.0.0.1:6379> help incrbyfloat
INCRBYFLOAT key increment
summary: Increment the float value of a key by the given amount
since: 2.6.0
group: string
숫자를 할당하면, 그 값을 기준으로 증감을 할 수 있다.
// 기준 값 설정
127.0.0.1:6379> set k 100
OK
// 1씩 incr 하고 1씩 decr하기
127.0.0.1:6379> incr k
(integer) 101
127.0.0.1:6379> incr k
(integer) 102
127.0.0.1:6379> incr k
(integer) 103
127.0.0.1:6379> decr k
(integer) 102
127.0.0.1:6379> decr k
(integer) 101
127.0.0.1:6379> decr k
(integer) 100
// 2씩 incr하고, 2씩 decr하기
127.0.0.1:6379> incrby k 2
(integer) 102
127.0.0.1:6379> incrby k 2
(integer) 104
127.0.0.1:6379> decrby k 2
(integer) 102
127.0.0.1:6379> decrby k 2
(integer) 100
// 소수 (예: 0.5)로 증감하기
127.0.0.1:6379> incrbyfloat k 0.5
"100.5"
127.0.0.1:6379> incrbyfloat k 0.5
"101"
127.0.0.1:6379> incrbyfloat k -0.5
"100.5"
127.0.0.1:6379> incrbyfloat k -0.5
"100"
정수의 경우 incrby 혹은 decrby 명령어 자체가 더하기나 빼기를 상징한다. 그렇지만, 파라미터로 음수를 부여하면 그 반대 연산도 가능하다. (즉, incrby를 썼지만 -2를 기입하면 decrby와 같은 효과) 그러나, incrbyfloat의 경우는 쌍이 되는 decrbyfloat 명령어가 별도로 존재하지 않는다. 빼기를 하려면 위와 같이 명시적으로 파라미터를 음수로 줘야 한다. 기존 incr/decr 명령어 시리즈는 v1.0.0부터 있었던 반면, incrbyfloat는 2.6.0에서야 추가된 것을 보면, 아마도 뒤에 구현한 사람이 굳이 두 개의 커맨드로 제어를 해야할까 고민하다 명령어 한 개로 합친 듯 하다.
'Development > Hadoop, NoSQL, BigData' 카테고리의 다른 글
Redis 자료 구조 - ZSet (Sorted Set) (0) | 2021.06.02 |
---|---|
Redis 자료 구조 - Hash (0) | 2021.05.27 |
Redis 자료 구조 - Set (0) | 2021.05.12 |
Redis 자료 구조 - List (0) | 2021.05.10 |
Memcached vs. Redis - 특징 비교 (0) | 2021.05.03 |
Redis 개요 (0) | 2021.04.28 |
Avro 개요 (0) | 2021.04.23 |
Redis 설치 방법 세 가지 (0) | 2021.04.21 |