스케일업 : 단일 서버(하드웨어)의 성능을 증가시켜 더 많은 요청을 처리하는 방법
-> 서비스 중단이나 하드웨어 비용 발생
-> 하나의 장비에 설치할 수 있는 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
'Redis' 카테고리의 다른 글
[Redis] 이것이 레디스다(3) - NoSQL (1) | 2025.01.02 |
---|