이것이 레디스다.(2)

안현수·2021년 10월 25일
0

이것이 레디스다.

목록 보기
2/4

2.1 레디스 설치

필자는 macOS를 쓰고 있기 때문에 간편하게 brew로 설치하였다.

brew install redis

레디스 서버 실행

redis-server

레디스 클라이언트로 서버 확인

redis-cli ping
pong

2.2 Hello레디스

key1키에 문자열을 저장하는 set과 문자열 조회하는 get명령 수행

127.0.0.1:6379> set key1 "hello world"
OK
127.0.0.1:6379> get key1
"hello world"
127.0.0.1:6379>

레디스 클라이언트에서 입력되는 명령어는 명령과 인자의 구분자로 공백 문자를 사용한다. 인자에 공백문자가 포함되면 두개의 인자로 인식되기 때문에 공백 문자가 포함된 인자는 따옴표로 감싸서 인자로 표현해야 된다.
참고로, 작은 따옴표와 큰 따옴표 동일하게 취급한다.

2.3 기본명령어

문자열 명령
append 명령어는 키가 존재하면 이미 저장되어 있는 제일 마지막 값의 뒤에 입력된 값을 추가한다. 단, 문자열 값만 유효하다.
key가 존재하지 않으면 새로운 set명령과 동일하게 동작한다.

127.0.0.1:6379> set user:name "david"
OK
127.0.0.1:6379> set user:name "kris"
OK
127.0.0.1:6379> append user:name "jeong"
(integer) 9
127.0.0.1:6379> get user:name
"krisjeong"

set명령은 기존에 있던 value를 변경한다.
레디스는 중복된 키에 대하여 중복쓰기 연산을 아무런 오류없이 수행한다.

user:name키의 :은 관례상 키에 의미를 부여하는 구분자로 사용된다.
키의 이름은 어떤 문자도 사용할 수 있다.

incr명령은 저장된 데이터의 값을 1씩 증가시킨다.
단, 저장 값이 숫자일 떄문 수행된다.

127.0.0.1:6379> set login:counter "0"
OK
127.0.0.1:6379> incr login:counter
(integer) 1
127.0.0.1:6379> incr login:counter
(integer) 2
127.0.0.1:6379> incr login:counter
(integer) 3
127.0.0.1:6379> get login:counter
"3"

decr는 값을 1감소시킨다. 단, 저장된 값이 숫자일 때만 해당한다.

2.4 리스트 명령

리스트 명령은 레디스에서 지원하는 리스트 데이터를 다루기 위한 명령의 집합니다. 레디스 리스트데이터는 논리적으로 링크드 리스트의 구현이다. 그러므로 데이터에 하나의 요소를 추가할 때 O(1)시간 안에 처리할 수 있다. 또 다른 특징은 '입력순서의 유지'이다. 데이터가 입력된 순서대로 저장되고 조회되기 떄문에 먼저 입력한 자료를 먼저 처리하는 큐로 사용되기도 한다.

lpush 명령은 지정된 리스트의 맨 앞쪽에 입력된 요소를 저장한다. 참고로 인자에 브라켓('[]')으로 둘러싸여 있는 부분은 생략이 가능하다.

lrange 명령은 리스트의 시작인덱스부터 종료인덱스 범위의 요소를 조회한다.

127.0.0.1:6379> lpush my:list:recommand java
(integer) 1
127.0.0.1:6379> lpush my:list:recommand javascript
(integer) 2
127.0.0.1:6379> lpush my:list:recommand eclipse redis "eclipse plugin"
(integer) 5
127.0.0.1:6379> lrange my:list:recommand
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange my:list:recommand 0 -1
1) "eclipse plugin"
2) "redis"
3) "eclipse"
4) "javascript"
5) "java"

세번째 lpush에서는 값을 3개 입력했다. 이 때도 O(1)로 표기할 수 있다.

lrange는 인덱스가 0부터 시작한다. -1은 마지막 자리를 의미하고, -2는 마지막에서 2번째 인덱스를 나타낸다.

셋명령은 순서가 보장되지 않고, 중복을 허용하지 않는 컬렉션이다.
sadd 명령은 지정된 셋에 입력된 값을 저장한다.
smembers 명령은 지정된 셋에 저장된 모든 값의 목록을 조회한다.

127.0.0.1:6379> sadd my:test:set my
(integer) 1
127.0.0.1:6379> sadd my:test:set name
(integer) 1
127.0.0.1:6379> sadd my:test:set is
(integer) 1
127.0.0.1:6379> sadd my:test:set kris
(integer) 1
127.0.0.1:6379> sadd my:test:set
(error) ERR wrong number of arguments for 'sadd' command
127.0.0.1:6379> smembers my:test:set
1) "kris"
2) "my"
3) "is"
4) "name"

보다싶이 순서가 보장이 되지 않는다.

정렬된 셋 명령은 셋데이터와 동일한 특성을 가지며 부가적으로 저장된 요소에 가중치를 부여하여 오름차순 정렬을 제공한다.

zadd명령은 정렬된 셋에 가중치와 값으로 이루어진 데이터를 저장한다. 단, 이미 존재하는 값일 때는 기존의 가중치를 입력된 가중치로 덮어쓴다.

zrange 명령은 정렬된 셋의 시작인덱스부터 종료인덱스 범위에 해당하는 값들을 가중치 오름차순으로 조회한다.

127.0.0.1:6379> zadd user:ranking 1 kris
(integer) 1
127.0.0.1:6379> zadd user:ranking 2 anna
(integer) 1
127.0.0.1:6379> zadd user:ranking 3 james
(integer) 1
127.0.0.1:6379> zadd user:ranking 4 jina
(integer) 1
127.0.0.1:6379> zrange user:ranking 0 -1
1) "kris"
2) "anna"
3) "james"
4) "jina"

만약 가중치가 동일하다면?

127.0.0.1:6379> zrange user:ranking 3 alice
(error) ERR value is not an integer or out of range
127.0.0.1:6379> zadd user:ranking 3 alice
(integer) 1
127.0.0.1:6379> zrange user:ranking 0 -1 withscoreds
(error) ERR syntax error
127.0.0.1:6379> zrange user:ranking 0 -1 withscores
1) "kris"
2) "1"
3) "anna"
4) "2"
5) "alice"
6) "3"
7) "james"
8) "3"
9) "kane"
10) "3"
11) "jina"
12) "4"

입력은 kane,alice 순서인데 alice가 먼저 출력됐다. 이처럼 정렬 이후 요소의 입력 순서가 뒤바뀌는 것을 '정렬 안정성이 없다'고 표현한다.

해시명령은 자바의 MAP과 동일하다.

hset 명령은 지정된 해시에 요청한 필드와 값을 저장한다. 단, 요청한 필드가 존재할 때는 저장된 값이 업데이트된다.

hget 명령은 지정된 해시에 저장된 필드의 값을 조회한다.

hgetall 명령은 지정된 키에 저장된 모든 필드와 값을 조회한다.

profile
백엔드 개발자 안현수입니다.

0개의 댓글