- String
- List
- Set
- Sorted Set
- Hash
- Expire
자료 구조의 기본 명령어를 알아보자.
먼저, Redis 서버를 가동한 후, Redis 커맨드 라인에 진입하자.
# redis가 위치한 디렉토리로 이동하여 redis-server 가동 (default는 로컬 호스트 IP(127.0.0.1)과 포트(6379)로 실행된다.)
$ cd src
$ redis-server
# 다른 창을 통해 커맨드 라인에 진입
$ cd src
$ redis-cli
가장 일반적인 자료구조
key-value 형식 (1:1)
기본 명령어
get
: key에 해당하는 value 리턴set
: key에 value 저장del
: key 삭제예제
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> del a # 삭제한 갯수 반환
(integer) 1
컬렉션, Strings의 묶음
first
, last
에 삽입, 삭제 가능 (자바의 Linked List와 유사)
기본 명령어
lpush <key> <value>
: (left) 첫 번째(index : 0)에 데이터 삽입rpush <key> <value>
: (right) 마지막(index : -1)에 데이터 삽입lpop <key> <value>
: 첫 번째 데이터 삭제rpop <key> <value>
: 마지막 데이터 삭제lrange <key> <s> <e>
: s부터 e index의 데이터 반환예제
127.0.0.1:6379> lpush a 1 # 추가된 value 갯수 리턴
(integer) 1
127.0.0.1:6379> rpush a 2
(integer) 2
127.0.0.1:6379> lpush a 3
(integer) 3
127.0.0.1:6379> lpush a 4
(integer) 4
127.0.0.1:6379> rpush a 5
(integer) 5
127.0.0.1:6379> lrange a 0 -1 # 첫 번째 인덱스 : 0 / 마지막 인덱스 : -1 / 마지막에서 2번째 인덱스 : -2...
1) "4"
2) "3"
3) "1"
4) "2"
5) "5"
127.0.0.1:6379> lrange a 0 3
1) "4"
2) "3"
3) "1"
4) "2"
127.0.0.1:6379> llen a
(integer) 5
127.0.0.1:6379> rpop a 3 # 끝에서 3개 반환
1) "5"
2) "2"
3) "1"
중복되지 않는 컬렉션
Set의 `value는 member
순서x
ex) 좋아요를 누른 사람 수, 특정 상품을 본 사람 수 등
기본 명령어
sadd <key> <value>
: key에 member(value) 삽입srem <key> <value>
: member(value) 삭제smembers <key>
: 모든 member 조회scard <key>
: member count 조회spop <key>
: 무작위로 member 삭제예제
127.0.0.1:6379> sadd myset a # 추가된 member 갯수 반환
(integer) 1
127.0.0.1:6379> sadd myset a
(integer) 0
127.0.0.1:6379> sadd myset b
(integer) 1
127.0.0.1:6379> sadd myset c
(integer) 1
127.0.0.1:6379> srem myset c # 삭제된 member 갯수 반환
(integer) 1
127.0.0.1:6379> smembers myset
1) "b"
2) "a"
127.0.0.1:6379> scard myset
(integer) 2
127.0.0.1:6379> sadd myset c d e f # 여러 member 삽입 가능
(integer) 4
127.0.0.1:6379> smembers myset
1) "d"
2) "c"
3) "a"
4) "f"
5) "b"
6) "e"
127.0.0.1:6379> spop myset 3 # 랜덤 member 삭제
1) "d"
2) "c"
3) "f"
127.0.0.1:6379> smembers myset
1) "a"
2) "b"
3) "e"
Set고 마찬가지로 중복되지 않는 컬렉션. 그러나 score
라는 값을 통해 순위를 매겨 정렬이 가능하다.
score
의 값이 같으면 value
로 정렬
value
는 중복 불가능, score
는 중복 가능
기본 명령어
zadd <key> <score> <member>
: key에 score와 member 추가zcard <key>
: member count 조회zrange <key> <s> <e>
: s부터 e index의 member 반환zrangebyscore <key> <min> <max>
: min~max 범위에 해당하는 score 값을 갖는 member 반환zrem <key> <member>
: member 삭제예제
127.0.0.1:6379> zadd ss 5 e # 추가된 value 갯수
(integer) 1
127.0.0.1:6379> zadd ss 3 c
(integer) 1
127.0.0.1:6379> zadd ss 1 a
(integer) 1
127.0.0.1:6379> zadd ss 2 b
(integer) 1
127.0.0.1:6379> zadd ss 4 d
(integer) 1
127.0.0.1:6379> zcard ss # value count
(integer) 5
127.0.0.1:6379> zrange ss 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> zrangebyscore ss 2 4
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> zrem ss b # 삭제된 value 갯수
(integer) 1
127.0.0.1:6379> zrange ss 0 -1
1) "a"
2) "c"
3) "d"
4) "e"
key 내부에 key-value가 존재하는 자료구조
하나의 key에 약 40억(4,294,967,295)개의 key-value 저장 가능
기본 명령어
hset <key> <field> <value> <field> <value> ...
: 하나의 key에 여러 field-value 저장hget <key> <field>
: key와 field 값에 해당하는 value 리턴hdel <key> <field>
: field 삭제hlen <key>
: field count 반환hgetAll <key>
: 모든 field - value 쌍 반환hkeys <key>
: 모든 field 반환hvals <key>
: 모든 value 반환예제
# field - value : name - jinmin / year - 1995 / month - 3
127.0.0.1:6379> hset hh name jinmin year 1995 month 3
(integer) 3
127.0.0.1:6379> hget hh name
"jinmin"
127.0.0.1:6379> hget hh year
"1995"
127.0.0.1:6379> hdel hh year
(integer) 1
127.0.0.1:6379> hlen hh
(integer) 2
127.0.0.1:6379> hgetAll hh
1) "name"
2) "jinmin"
3) "month"
4) "3"
127.0.0.1:6379> hkeys hh
1) "name"
2) "month"
127.0.0.1:6379> hvals hh
1) "jinmin"
2) "3"
설정한 시간내로 key를 자동 삭제
(주의) 바로 set, getset의 명령어를 expire 명령어 이후에 key에 다시 적용하면 expire 명령은 무효
incr
, lpush
, sadd
, zadd
, hset
과 같은 명령어는 유지기본 명령어
expire <key> <member> <second>
: key에 ttl 설정 (ttl : Time To Live)ttl <key>
: 남은 ttl을 초단위로 확인예제
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> expire a 20
(integer) 1
127.0.0.1:6379> ttl a
(integer) 16
127.0.0.1:6379> ttl a
(integer) 13
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> ttl a
(integer) 8
127.0.0.1:6379> ttl a
(integer) 3
127.0.0.1:6379> ttl a
(integer) -2
127.0.0.1:6379> get a
(nil)
참고 : 사바라다는 차곡차곡 님의 블로그