본문 바로가기
Redis

[Redis] 이것이 레디스다(1, 2) - 들어가며 빨리 시작해보기

by 개발LOG 2025. 1. 2.

스케일업 : 단일 서버(하드웨어)의 성능을 증가시켜 더 많은 요청을 처리하는 방법

-> 서비스 중단이나 하드웨어 비용 발생

-> 하나의 장비에 설치할 수 있는 CPU 및 메모리와 디스크 수 상승에 대한 물리적 한계 있음

 

스케일아웃 : 동일한 사양의 새로운 서버(하드웨어)를 추가하는 방법 

-> 서버 분산

-> NoSQL(레디스, 엘라스틱서치 등)

 

레디스란?

고성능 인메모리 키-값 저장소로서 다섯가지 데이터형(문자열, 리스트, 해시, 셋, 정렬된 셋)을 지원하는 것, 주로 검색엔진으로 빅데이터 환경에서 사용됨.


레디스 기본 명령어

set 키 값

- 키에 대한 값 추가, 키가 없으면 새로 키-값 생성, 키가 있으면 값 덮어씌움

명령 set 키 값
최초 지원 1.0.0
시간 복잡도 O(1)
응답 <상태응답>, 항상 OK
예시 > set key1 hello
OK
> get key1
hello

 

 

append 키 값

- 키에 대한 값 추가 , 키가 없으면 새로 키-값 생성, 키가 있으면 마지막 값에 이어 붙임

명령 append 키 값
최초 지원 2.0.0
시간 복잡도 O(1)
응답 <숫자응답>, 추가된 문자열을 포함한 전체 문자열의 길이
예시 > set user:name "hello"
OK
> set user:name "kkk"
OK
> append user:name "ppp"
(integer) 6
> get user:name
"kkkppp"

 

 

incr 키

- 저장된 데이터 값 1 증가

명령 incr 키 값
최초 지원 1.0.0
시간 복잡도 O(1)
응답 <숫자응답>, 명령이 실행된 후의 키의 값
예시 > set login:counter "0"
OK
> incr login:counter 
(integer) 1
> incr login:counter 
(integer) 2
> get login:counter 
"2"

 

 

decr 키

- 저장된 데이터 값 1 감소

명령 decr 키 값
최초 지원 1.0.0
시간 복잡도 O(1)
응답 <숫자응답>, 명령이 실행된 후의 키의 값
예시 > set login:counter "2"
OK
> decr login:counter 
(integer) 1
> decr login:counter 
(integer) 0
> get login:counter 
"0"

 

 

lpush 키 값 값 ...

- 리스트 왼쪽에 값 추가

명령 lpush 키 값 ...
최초 지원 1.0.0
시간 복잡도 O(1)
응답 <숫자응답>, 명령이 실행된 후의 요소 수
예시 > lpush my:list:recommand java
(integer) 1
> lpush my:list:recommand javascript
(integer) 2
> lpush my:list:recommand eclipse redis "tt pp"
(integer) 5
> lrange my:list:recommand 0 -1
1) "ttpp"
2) "redis"
3) "eclipse"
4) "javascript"
5) "java"

 

 

lrange 키 시작인덱스 종료인덱스

- 리스트의 시작인덱스부터 종료인덱스 범위의 요소 조회

명령 lrange 키 시작인덱스 종료인덱스 
최초 지원 1.0.0
시간 복잡도 O(S+N)
S는 시작인덱스, N범위에 속하는 요소의 개수
응답 <멀티벌크응답>, 해당 범위의 요소들, 존재하지 않을 때 nil
예시 > lpush my:list:recommand java
(integer) 1
> lpush my:list:recommand javascript
(integer) 2
> lpush my:list:recommand eclipse redis "tt pp"
(integer) 5
> lrange my:list:recommand 0 -1
1) "ttpp"
2) "redis"
3) "eclipse"
4) "javascript"
5) "java"

레디스에서 음수가 입력되면 마지막부터 센다.그러므로 '-2' 라고 한다면 0부터 마지막에서 두번째까지의 데이터를 조회하라는 의미가 된다.

 

 

sadd 키 값 값 ...

- 셋(집합)에 입력된 값 저장, 리스트와의 차이점은 순서가 없고 중복은 제거됨 

명령 sadd 키 값 값 ... 
최초 지원 1.0.0
시간 복잡도 O(N)
N은 입력된 값의 개수
응답 <숫자응답>, 성공이면 입력된 값의 개수, 이미 존재하는 값이면 0
예시 > sadd my:test:set my
(integer) 1
> sadd my:test:set name
(integer) 1
> sadd my:test:set is
(integer) 1
> smembers my:test:set
1) "is"
2) "name"
3) "my"
> sadd my:test:set "." ee
(integer) 2
> smembers my:test:set
1) "is"
2) "."
3) "name"
4) "my"
5) "ee"

 

 

smembers 키

- 셋(집합)에 저장된 모든 값의 목록 조회 , 순서없이 중복제거되어 조회됨

명령 smembers 키
최초 지원 1.0.0
시간 복잡도 O(N)
N은 입력된 값의 개수
응답 <멀티벌크응답>, 조회된 값 목록, 값이 존재하지 않을 때 nil
예시 > sadd my:test:set my
(integer) 1
> sadd my:test:set name
(integer) 1
> sadd my:test:set is
(integer) 1
> smembers my:test:set
1) "is"
2) "name"
3) "my"
> sadd my:test:set "." ee
(integer) 2
> smembers my:test:set
1) "ee"
2) "."
3) "name"
4) "my"
5) "is"

 

 

zadd 키 가중치 값

- 정렬된 셋에 가중치와 값으로 이루어진 데이터 저장, 이미 존재하는 값일 때는 기존의 가중치를 입력된 가중치로 덮어쓰면서 사전순으로 정렬되어 저장된다.

명령 zadd 키 가중치 값
최초 지원 1.2.0
시간 복잡도 O(log(N))
N은 입력되어 있는 값의 개수
응답 <숫자응답>, 성공이면 입력된 값의 개수, 이미 존재하는 값이면 0
예시 > zadd user:ranking 1 kk
(integer) 1
> zadd user:ranking 2 aa
(integer) 1
> zadd user:ranking 3 jang
(integer) 1
> zadd user:ranking 4 bb
(integer) 1
> zrange user:ranking 0 -1
1) "kk"
2) "aa"
3) "jang"
4) "bb"
>  zadd user:ranking 3 kane
(integer) 1
> zrange user:ranking 0 -1
1) "kk"
2) "aa"
3) "jang"
4) "kane"
5) "bb"
>  zadd user:ranking 3 alice
(integer) 1
> zrange user:ranking 0 -1 withscores
1) "kk"
2) "1"
3) "aa"

4) "2"
5) "alice"
6) "3"
7) "jang"
8) "3"
9) "kane"
10) "3"
11) "bb"
12) "4"

 

 

zrange 키 시작인덱스 종료인덱스

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

명령 zrange 키 시작인덱스 종료인덱스
최초 지원 1.2.0
시간 복잡도 O(log(N)+m)
N은 입력되어 있는 값의 개수, M은 조회된 값의 개수
응답 <멀티벌크응답>, 조회된 값 목록, 값이 존재하지 않을 때 nil
예시 > zadd user:ranking 1 kk
(integer) 1
> zadd user:ranking 2 aa
(integer) 1
> zadd user:ranking 3 jang
(integer) 1
> zadd user:ranking 4 bb
(integer) 1
> zrange user:ranking 0 -1
1) "kk"
2) "aa"
3) "jang"
4) "bb"
>  zadd user:ranking 3 kane
(integer) 1
> zrange user:ranking 0 -1
1) "kk"
2) "aa"
3) "jang"
4) "kane"
5) "bb"
>  zadd user:ranking 3 alice
(integer) 1
> zrange user:ranking 0 -1 withscores
1) "kk"
2) "1"
3) "aa"

4) "2"
5) "alice"
6) "3"
7) "jang"
8) "3"
9) "kane"
10) "3"
11) "bb"
12) "4"

zrange의 withscores를 같이 입력하면 가중치와 함께 조회된다.

 

 

hset 키 필드이름 값

- 해시에 요청한 필드와 값 저장, 필드가 있을 시 값 엎어씀

명령 hset 키 필드이름 값
최초 지원 2.0.0
시간 복잡도 O(1)
응답 <숫자응답>, 존재하지 않는 필드일 때 1, 존재하는 필드일 때 0
예시 > hset user:1 name kk
(integer) 1
> hset user:1 lastname jj
(integer) 1
>  hset user:1 location "zz, bb, aa"
(integer) 1
> hget user:1 lastname
"jj"
> hgetall user:1
1) "name"
2) "kk"
3) "lastname"
4) "jj"
5) "location"
6) "zz, bb, aa"

 

hget 키 필드이름

- 해시에 저장된 필드의 값 조회

명령 hget 키 필드이름
최초 지원 2.0.0
시간 복잡도 O(1)
응답 <벌크응답>, 지정된 필드가 존재할 때 저장된 값 아니면 nil 
예시 > hset user:1 name kk
(integer) 1
> hset user:1 lastname jj
(integer) 1
>  hset user:1 location "zz, bb, aa"
(integer) 1
> hget user:1 lastname
"jj"
> hgetall user:1
1) "name"
2) "kk"
3) "lastname"
4) "jj"
5) "location"
6) "zz, bb, aa"

 

hgetall 키 

- 해시에서 키에 저장된 모든 필드와 값 조회

명령 hgetall 키
최초 지원 2.0.0
시간 복잡도 O(N)
응답 <멀티벌크응답>, 지정된 키에 저장된 모든 필드와 값의 목록
예시 > hset user:1 name kk
(integer) 1
> hset user:1 lastname jj
(integer) 1
>  hset user:1 location "zz, bb, aa"
(integer) 1
> hget user:1 lastname
"jj"
> hgetall user:1
1) "name"
2) "kk"
3) "lastname"
4) "jj"
5) "location"
6) "zz, bb, aa"

 


레디스 성능 측정 명령어

redis-benchmark

 

응답시간 측정 명령어

redis-cli --latency

 

주기적인 통계 정보 조회 명령어

redis-cli info cpu

redis-cli info stats

redis-cli info keyspace

 


참고링크:

https://product.kyobobook.co.kr/detail/S000001057483

 

이것이 레디스다 | 정경석 - 교보문고

이것이 레디스다 | 『이것이 레디스다』는 NoSQL의 분류에 관한 설명을 포함한다. 데이터 저장구조를 기준으 로 NoSQL을 분류하고 해당 개념을 간단하게나마 정리하여 NoSQL에 대한 기본지식을 익힌

product.kyobobook.co.kr

 

'Redis' 카테고리의 다른 글

[Redis] 이것이 레디스다(3) - NoSQL  (1) 2025.01.02