(Redis) 기본 명령어

1. 문자열 명령

set 키 value 로 입력

예) set user:name "kris"

여기서 레디스에서는 user:name 키에 사용된 세미콜론(:) 이 거슬릴 수도 있지만, 하지만 레디스는 키 이름에는 별다른 제한이 없다. 심징 바이트 배열도 키로 사용할 수 있다.

그러나 관례상 콜론은 키에 의미를 부여하는 구분자로 사용된다

* append 명려어는 set에 저장된 마지막 키에 해당하는 value값에 새로운 문자열을 이어서 붙이는 효과이다.
예를들어 append user:name "jeong"를 하게 되면

get user:name의 값은 "krisjeong"가 된다.



1-1 incr명령어

* incr명령은 저장된 데이터의 값을 1씩 증가시킨다.

예) set login:counter "0"
     incr login:counter
     incr login:counter
     incr login:counter
    get login:counter의 값은 "3"이 나온다.

단, 저장된 값이 숫자일 때만 해당된다.

*decr 명령은 키값을 1 감소시킨다.단, 저장된 값이 숫자일 떄만 해당한다.




2. 리스트 명령

레디스의 리스트 데이터는 논리적으로 링크드 리스트의 구현이다.

* lpush 명령은 지정된 리스트의 맨 앞쪽에 입력된 요소를 저장한다.
* lrange 명령은 지정된 리스트의 시작인덱스붜 종료인덱스 범위의 요소를 조회한다.

-> 세번쨰 lpush 명령어를 주의 깊게 보자. 이처럼 레디스의 특정명령은 때에 따라 여러개의 키와 값으로 구성된 인자를 입력받을 수 있다. 이때 해당 명령의 수행시간은 입력된 인자 갯수에 비례하여 처리되므로 O(n) 처리 시간으로 표기할 수 있다.
그러나 저장된 데이터의 양과는 무관하게 개별적인 입력 연산은 O(1) 의 처리 시간을 보인다.


* lrange명령의 인자값을 주의깊게 보자. 이 부분은 시작 인덱스와, 종료인덱스를 나타낸다.
레디스에서 사용하는 모든 인덱스는 모두 0을 기준으로 한다.
단 음수표현은 예외다. 레디스 명령의 인덱스 표현에서 '-1'은 조금 특별한 데, 인덱스의 마지막 자리를 의미한다. 음수가 입력되면 인덱스를 맨 마지막부터 센다. 그러므로 '-2'는 맨 마지막에서 두 번째의 인덱스를 나타낸다.


3. 셋 명령

레디스의 셋 데이터는 순서가 보장되지 않으며 중복을 허용되지 않는 컬렉션이다.
즉, 입력 순서와 상관없이 중복된 데이터가 조회된다.

* sadd 명령은 지정된 셋에 입력된 값을 저장한다.
* smembers 명령은 지정된 셋에 저장된 모든 값의 목록을 조회한다.



-> set 데이터는 저장된 데이터이 순서를 전혀 보장하지 않는다.
그렇다면 순서를 가진 셋 데이터를 저장하고 싶을떄는 어떻게 해야 할까?

4. 정렬된 셋 명령

정렬된 셋 데이터 명령은 가장 많이 사용되며 다양한 분야에 활용된다.
정렬된 셋은 레디스에서 지원하는 '셋 데이터'와 동일한 특징을 가지며 부가적으로 저장된 요소에 가중치를 부여하여 작은 값부터 큰 값으로(오름차순) 정렬을 제공한다.

* zadd명령은 정렬된 셋에 가중치와 값으로 이루어진 데이터를 저장한다. 단, 이미 존재하는 값일 떄는 기존의 가중치를 입력된 가중치로 덮어쓴다.
-> 시간복잡도 : O(log(N))
* zrange 명령은 정렬된 셋의 시작인덱스부터 종료인덱스 범위에 해당하는 값들을 가중치 오름차순으로 조회한다.
- > 시간복잡도: O(log(N) + (M))
- > N은 입력되어 있는 값의 개수, M은 조회된 값의 개수



-> 위 예제에는 특이 사항이 없어보인다. 하지만 이미 있는 동일한 가중치를 가지는 값을 입력할 때 어떻게 되는지 살펴보자


-> zrange 명령에 withscores인자를 주면 출력 결과에 요소와 가중치가 함께 표시된다.
데이터 입력은 kane, james 순서인데 결과는 다르게 출력된다. 이처럼 정렬 이후에 요소의 입력 순서가 뒤바꾸는 것을 '정렬 안정성이 없다'고 표현된다.


4. 해시 명령

먼저 hset, hget, hgetall 명령을 살펴보자

* hset 명령은 지정된 해시에 요청한 필드와 값을 저장한다. 단, 요청한 필드가 존재할 때는 저장된 값이 업데이트 된다.
* hget 명령은 지정된 해시에 저장된 필드의 값을 조회한다.
* hgetall 명령은 지정된 키에 저장된 모든 필드와 값을 조회한다.


->user:1 키에 해시 데이터로 <name, kris> , <lastname, jeong> ,<location,"Gangname Bldg., Gangnam-gu, Seoul, Korea"> 를 입력하고 조회한다.


댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬