레디스에 대한 소개
in-memory
- 비쌈
- 응답속도가 빠름
key 기반 nosql
성능을 위한 캐싱
- db 전에 캐싱으로 사용
확장성
- 서버간 데이터공유
- 분산 세션등
실시간 처리에 최적화 되어있음
- 메모리
- 여러가지 자료구조
분산락
장점
- 빠른속도 0.1-1ms
- 낮은 지연시간
- 높은 처리량 (초당 수십만건) 단점
- 휘발성
- 가격
- hot data만 저장
레디스와 관계형 DB
- 저장하는 매체
- key-value, 관계형
- 속도, 복잡한 쿼리
Redis vs Memcached
- Redis는 다양한 자료구조, Memcached는 스트링
- 영속석 vs 영속성 없음
- Memcached 멀티 스레드 지원
레디스는 캐시이상으로 조금더 다양하게 사용가능, Memcached는 완전히 캐시로만 사용
클러스터 환경 설계 기법
구성방법
- 단일 인스턴스로 구성
- 간단함
- SEOF
- 마스터, 레플리카 구조
- 마스터는 쓰기 요청 처리
- 레플리카는 조회 처리
- 마스터가 다운되면?
- 메뉴얼하게 레플리카중 하나를 마스터로 지정
- 센티널
- 레디스 서버와 독립적으로 수행
- 레디스의 모든것을 모니터링
- 클러스터에서 메뉴얼한 마스터지정을 수행
- 3개정도의 센티넬 지정
- 투표
- s 다운
- o 다운
- 클러스터 샤딩
-
데이터를 여러 노드에 중복
-
마스터들이 슬롯을 나눠서 관리
- 멀티키 명령을 처리하려면 여러개의 키가 하나의 마스터에 있어야함
- 없으면 에러
- 이 문제를 해결하려면 해시태그 기법을 사용
- 키 이름에 중괄호
- user 1000
- 멀티키 명령을 처리하려면 여러개의 키가 하나의 마스터에 있어야함
-
레디스의 타입
-
레디스는 기본적으로 String으로 사용
- 바이트 배열
-
레디스의 키는 스트링
-
최대 512MB
-
Binary Safe
- 이진 데이터
- 직렬화된 데이터
-
네트워크 관점에서 대역폭 사용이 있기때문에 작게 저장하는게 좋음
-
SDS (Simple Dynamic String) 구조
- 특징
- len: 문자열 길이
- free:여유공간
- buf: 문자 데이터
- 장점
- 길이 조회
- 버퍼 오버플로우
- 바이너리 세이프
- 효율적인 Append
- 특징
-
3가지 인코딩
- int: 해더 16, 정수값 8 = 24 바이트
- embstr: 레디스 객체와 SDS합쳐서 20, 문자열 길이
- raw: 레디스 객체 16, SDS 해더 8, 문자열 + 여유
명령어
- SET, GET
- SET
- SET users:1000:name 김철수
- 콜론으로 구조화
- SET
- INCR, DECR, INCRBY, DECRBY
- 원자적 연산
- 즉 race condition이 없음
- 키가 없으면 0으로 초기화 및 증가
- *BY는 원하는 숫자만큼 증가/감소
- 원자적 연산
- MSET, MSGET
- 여러개를 같이 사용하므로써 네트워크 RTT(Round Trip Time)감소
- MSET 키 값 키 값
- SET 옵션
- SETEX: TTL → 지금은 SET에서 지원
- SETNX: 키가 없을때만 저장
키를 관리하는 여러가지 관리 기법
- KEYS
- 패턴에 일치하는 모든 키를 가져옴
- 서버 블로킹, 모든 키를 순회하기 때문에 n의 복잡도
- 프로덕션에서 사용하면 안 됨
- SCAN
- KEYS에 대한 대안
- 커서기반으로 키를 검색