1. 개요
지난 포스팅에서는 Redis를 Windows 환경에서 설치해보고, 간단한 명령어 테스트 및 설정변경 방법을 알아보았다. 이번 포스팅에서는 Redis의 지원 자료구조와 관련된 명령어를 알아보겠다.
2. Redis 지원 자료구조
2-1. 문자열
- set : Key-Value(JSON)를 저장하는 명령어이다.
- get : 저장한 JSON을 key값을 통해 출력하는 명령어이다.
27.0.0.1:6379> set username david
OK
127.0.0.1:6379> set username ronaldo
OK
127.0.0.1:6379> get username
"ronaldo"
127.0.0.1:6379>
먼저 'david'라는 username을 저장했고, 그 다음 다시 username을 'ronaldo'로 저장했다. 그리고 get으로 출력해보면 'ronaldo'가 출력되었다. username의 Value인 'david'가 'ronaldo'로 변경 되었다. Redis는 동일한 Key값에 대해 중복연산을 별다른 오류없이 처리한다.
- append [ Key ][ Value ] : 기존 Value값에 해당 Value 값을 덧붙인다.
127.0.0.1:6379> set username david
OK
127.0.0.1:6379> set username ronaldo
OK
127.0.0.1:6379> get username
"ronaldo"
127.0.0.1:6379> append username potugal
(integer) 14
127.0.0.1:6379> get username
"ronaldopotugal"
127.0.0.1:6379>
기존 username의 Value 값인 'ronaldo'에 'portugal'이 추가되었다. 만약 띄워쓰기를 하고 싶다면? 쌍따옴표를 넣어주면 된다.
127.0.0.1:6379> set username david
OK
127.0.0.1:6379> set username ronaldo
OK
127.0.0.1:6379> get username
"ronaldo"
127.0.0.1:6379> append username " portugal"
(integer) 16
127.0.0.1:6379> get username
"ronaldo potugal"
127.0.0.1:6379>
- incr : 저장된 Value값을 1 증가시킨다.
- decr : 저장된 Value값을 1 감소시킨다.
두 명령어 다 값이 숫자일때만 가능하다.
127.0.0.1:6379> set likeCnt 0
OK
127.0.0.1:6379> incr likeCnt
(integer) 1
127.0.0.1:6379> get likeCnt
"1"
127.0.0.1:6379> incr likeCnt
(integer) 2
127.0.0.1:6379> incr likeCnt
(integer) 3
127.0.0.1:6379> incr likeCnt
(integer) 4
127.0.0.1:6379> get likeCnt
"4"
127.0.0.1:6379> decr likeCnt
(integer) 3
127.0.0.1:6379> get likeCnt
"3"
127.0.0.1:6379>
2-2 리스트
Redis에서 List 데이터를 취급할 수 있도록 지원하며, 이와 관련된 명령어도 지원한다. Redis에서 리스트는 링크드리스트 기반으로 지원한다.
- lpush [Key][Value] : 리스트의 맨 앞 (제일 왼쪽)에 데이터를 넣는 명령어이다.
- rpush [Key][Value] : 리스트의 맨 끝 (제일 오른쪽)에 데이터를 넣는 명령어이다.
- lrange [Key][Start][End] : 리스트를 조회할때 쓰는 명령어이다.
- lrange favoriteTeam 0 -1 : favoriteTeam 리스트에서 맨 처음 (0) 부터 제일 끝 (-1)까지 조회.
127.0.0.1:6379> lpush favoriteTeam mancity
(integer) 1
127.0.0.1:6379> lpush favoriteTeam "ulsan hyundai"
(integer) 2
127.0.0.1:6379> lpush favoriteTeam "spurs"
(integer) 3
127.0.0.1:6379> lrange 0 -1
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange favoriteTeam 0 -1
1) "spurs"
2) "ulsan hyundai"
3) "mancity"
127.0.0.1:6379> rpush favoriteTeam "byern"
(integer) 4
127.0.0.1:6379> lrange favoriteTeam 0 -1
1) "spurs"
2) "ulsan hyundai"
3) "mancity"
4) "byern"
127.0.0.1:6379>
rpush 후 어느 쪽에서 데이터를 꺼내느냐에 따라 Queue와 Stack을 구현할 수도 있다.
<rpush 가정>
- lpop : 리스트의 끝에서 데이터가 추가된 상태에서 가장 첫번째 값을 꺼낸다 (Queue)
- rpop : 리스트의 끝에서 데이터가 추가된 상태에서 가장 마지막 값을 꺼낸다 (Stack)
127.0.0.1:6379> rpush stackAndQueue 1
(integer) 1
127.0.0.1:6379> rpush stackAndQueue 2
(integer) 2
127.0.0.1:6379> rpush stackAndQueue 3
(integer) 3
127.0.0.1:6379> rpush stackAndQueue 4
(integer) 4
127.0.0.1:6379> rpush stackAndQueue 5
(integer) 5
127.0.0.1:6379> lrange stackAndQueue 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> lpop stackAndQueue
"1"
127.0.0.1:6379> lrange stackAndQueue 0 -1
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> rpop stackAndQueue
"5"
127.0.0.1:6379> lrange stackAndQueue 0 -1
1) "2"
2) "3"
3) "4"
127.0.0.1:6379>
2-3 셋
셋 (Set)은 중복을 허용하지 않고, 순서가 없는 자료구조이다. 즉, 입력순서와 상관없이 중복은 제거된 채로 저장된다.
- sadd [Key][Value] : Set 자료구조에 값을 저장하는 명령어이다.
- smembers [Key] : Set 자료구조에 저장된 값을 출력하는 명령어이다.
127.0.0.1:6379> sadd my:string "Sonny"
(integer) 1
127.0.0.1:6379> sadd my:string "is"
(integer) 1
127.0.0.1:6379> sadd my:string "World Class!"
(integer) 1
127.0.0.1:6379> smembers my:string
1) "World Class!"
2) "is"
3) "Sonny"
127.0.0.1:6379>
출력 결과에서 볼 수 있듯, 순서가 보장되지 않는채로 저장된다.
127.0.0.1:6379> sadd my:string "World Class!"
(integer) 0
127.0.0.1:6379> smembers my:string
1) "World Class!"
2) "is"
3) "Sonny"
127.0.0.1:6379>
마찬가지로, 중복된 값을 넣으면 저장이 되지 않는 것을 확인할 수 있다.
2-4 정렬된 셋 (Sorted Set 또는 zset)
Redis에서 지원하는 정렬된 셋 데이터를 다루는 명령어이며, Redis에서 가장 많이 사용되는 자료구조이다. 값을 저장할때 가중치를 부여하며, 조회 시, 가중치를 오름차순으로 정렬하여 출력한다.
- zadd [Key][Weight][Value] : 정렬된 셋 자료구조에 값을 저장하는 명령어이다.
- zrange [Key][Start][end] : 정렬된 셋 자료구조의 범위 내의 값을 가중치 오름차순으로 조회한다.
127.0.0.1:6379> zadd member:names 1 "Heung Min Son"
(integer) 1
127.0.0.1:6379> zadd member:names 2 "Min Jae Kim"
(integer) 1
127.0.0.1:6379> zadd member:names 3 "Kang In Lee"
(integer) 1
127.0.0.1:6379> zrange member:names 0 -1
1) "Heung Min Son"
2) "Min Jae Kim"
3) "Kang In Lee"
127.0.0.1:6379>
하지만, 동일한 가중치로 다른 값을 넣으면 어떻게 될까?
127.0.0.1:6379> zadd member:names 1 "Heung Min Son"
(integer) 1
127.0.0.1:6379> zadd member:names 2 "Min Jae Kim"
(integer) 1
127.0.0.1:6379> zadd member:names 3 "Kang In Lee"
(integer) 1
127.0.0.1:6379> zrange member:names 0 -1
1) "Heung Min Son"
2) "Min Jae Kim"
3) "Kang In Lee"
127.0.0.1:6379> zadd member:names 3 "Deok Bae Kim"
(integer) 1
127.0.0.1:6379> zadd member:names 3 "Harry Kane"
(integer) 1
127.0.0.1:6379> zrange member:names 0 -1
1) "Heung Min Son"
2) "Min Jae Kim"
3) "Deok Bae Kim"
4) "Harry Kane"
5) "Kang In Lee"
127.0.0.1:6379>
아까 가중치 3인 값은 'Kang In Lee', 'Deok Bae Kim', 'Harry Kane' 순으로 입력했는데, 출력에서는 'Deok Bae Kim', 'Harry Kane', 'Kang In Lee' 순으로 출력되었다. 이처럼 정렬된 셋에서 값 저장 후 순서가 바뀌는 것을 '정렬 안정성이 없다' 라고 한다.
2-5 해시 (Hash)
Redis에서는 해시를 지원한다. 자바에서는 Map과 동일한 구조이다. 한 객체에 여러 Key-Value 데이터를 저장할 수 있다.
- hset [Key][Hkey][Hvalue] : 해당 해시 자료구조에 Key-Value 데이터를 저장한다.
- hget [Key][Hkey] : 해당 해시 자료구조의 저장된 해당 필드값을 조회한다.
- hgetall : 해시에 저장된 모든 필드값을 조회한다. (Key, Value 순으로 줄바꿈되어 조회된다.)
127.0.0.1:6379> hset user:user1 name "Cheol Su Kim"
(integer) 1
127.0.0.1:6379> hset user:user1 age 27
(integer) 1
127.0.0.1:6379> hset user:user1 address "Seoul"
(integer) 1
127.0.0.1:6379> hget user:user1 address
"Seoul"
127.0.0.1:6379> hgetall user:user1
1) "name"
2) "Cheol Su Kim"
3) "age"
4) "27"
5) "address"
6) "Seoul"
127.0.0.1:6379>
'웹 개발 공부 : Back-end > Redis' 카테고리의 다른 글
[Redis] Redis 맛보기 - 1 (설치 및 기본설정) (0) | 2024.09.09 |
---|---|
[Redis] #1 Redis(레디스)란 무엇인가? (0) | 2024.09.09 |