레디스는 인메모리에서 빠르게 동작하고, 자료형과 기능을 이용하여 데이터를 유연하게 표현할 수 있어 최근 웹 시스템 등에서 널리 사용되고 있다. 『실전 레디스』는 레디스의 기초부터 실무 활용까지 포괄적으로 다루는 레디스 핵심 가이드이다. 최신 버전의 레디스 기능뿐만 아니라 데이터 저장, 클러스터링, 모니터링과 같은 실제 레디스를 운영하면서 꼭 필요한 내용까지 여러 사례와 함께 설명한다. 특히 실전에서 레디스를 활용하기 위한 저자의 노하우를 바탕으로 COLUMN 구성을 통해 레디스의 명령어에 대한 추가 설명과 레디스의 기능 비교 및 함수 설명까지 배울 수 있다. 마지막으로 레디스의 지속적인 활용을 위해 멤케시디와 비교하면서 레디스의 전망을 소개하는 부록까지 제공한다.
Contents
[PART 01 기초]
CHAPTER 01 레디스의 시작
_1.1 레디스를 사용하기까지
_1.2 레디스의 특징
__1.2.1 레디스의 동작 이미지
__1.2.2 다른 데이터베이스와 어떻게 다른가
__1.2.3 의존성이 적은 레디스
__1.2.4 레디스의 활용
__1.2.5 속도가 빠르고 기능이 많은 인메모리 데이터 저장소
COLUMN 레디스의 탄생부터 현재까지
__1.2.6 RDBMS와 비교
COLUMN ACID 특성
__1.2.7 멤케시디와 비교
_1.3 레디스 서버 설정
__1.3.1 우분투에서 레디스 설치
__1.3.2 소스코드로 설치
_1.4 레디스 동작 테스트
__1.4.1 redis-server 실행 및 redis-cli로 접속하기
COLUMN GUI 클라이언트
COLUMN redis-cli에 연결할 수 없을 때의 트러블슈팅
__1.4.2 redis-cli 동작
__1.4.3 원격 연결로 조작하기
_1.5 레디스 문서와 공식 리소스
__1.5.1 레디스 자료형(레디스 문서)
__1.5.2 레디스 교육
__1.5.3 레디스 활용
CHAPTER 02 자료형과 기능
_2.1 자료형과 기능 개요
__2.1.1 다섯 가지 자료형
__2.1.2 보조 자료형과 기능
__2.1.3 레디스의 폭 넓은 데이터 모델 표현성
__2.1.4 레디스의 자료형과 명령어
__2.1.5 레디스 유틸리티 명령어
_2.2 String형
COLUMN 레디스의 String형은 지금도 512MB가 최대인가
__2.2.1 String형 활용: 빠른 세션 캐시
__2.2.2 String형 주요 명령어
__2.2.3 String형 숫자값
__2.2.4 String형 명령어
COLUMN 그 외 String형에서 사용 가능한 명령어
COLUMN String형에서 폐지 예정/폐지 가능성이 있는 명령어
__2.2.5 String형 실행 예시
__2.2.6 SET 명령어와 옵션
_2.3 List형
__2.3.1 List형 활용: 인기 콘텐츠 표시
__2.3.2 List형 주요 명령어
COLUMN 그 외 List형에서 사용 가능한 명령어
COLUMN List형에서 폐지 예정인 명령어
__2.3.3 List형 실행 예시
_2.4 Hash형
__2.4.1 Hash형 활용: 객체 스토리지
__2.4.2 Hash형 주요 명령어
COLUMN 그 외 Hash형에서 사용 가능한 명령어
COLUMN Hash형에서 폐지 예정인 명령어
__2.4.3 Hash형 실행 예시
__2.4.4 성능을 발휘하기 위한 주의사항
_2.5 Set형
__2.5.1 Set형 활용: 고유 사용자 수 조사
__2.5.2 Set형 주요 명령어
COLUMN 그 외 Set형에서 사용 가능한 명령어
__2.5.3 Set형 실행 예시
_2.6 Sorted Set형
__2.6.1 Sorted Set형 활용: 실시간 랭킹
__2.6.2 Sorted Set형 주요 명령어
COLUMN 그 외 Sorted Set형에서 사용 가능한 명령어
COLUMN Sorted Set형에서 폐지 예정인 명령어
__2.6.3 Sorted Set형 실행 예시
_2.7 대표 기능과 관련 명령어
__2.7.1 비트맵(비트 배열)
__2.7.2 지리적 공간 인덱스
COLUMN Geohash
COLUMN 지리적 공간 인덱스에서 폐지 예정인 명령어
__2.7.3 Pub/Sub 기능
__2.7.4 HyperLogLog
COLUMN 내부 인코딩
__2.7.5 레디스 스트림
COLUMN 레디스 스트림과 유사한 자료형 및 기능 비교
__2.7.6 자료형 관계없이 사용 가능한 명령어
COLUMN 시간 복잡도
COLUMN 그 외 명령어
CHAPTER 03 고급 기능
_3.1 파이프라인
__3.1.1 파이프라인 실행 예시
_3.2 루아
__3.2.1 이페머럴 스크립트
__3.2.2 레디스 함수
__3.2.3 레디스의 루아 프로그래밍
_3.3 트랜잭션
_3.4 모듈
__3.4.1 모듈로 구현할 수 있는 것
__3.4.2 모듈을 실제로 사용하는 경우
_3.5 키 공간 알림
_3.6 클라이언트 측 캐싱
CHAPTER 04 레디스를 활용한 애플리케이션 작성
_4.1 다양한 언어를 지원하는 레디스
__4.1.1 프로그래밍 언어와 레디스 조합
COLUMN Redis OM 라이브러리
COLUMN 레디스와 TLS 기능
_4.2 PHP로 레디스 작업
__4.2.1 PhpRedis로 작업
__4.2.2 세션 정보 캐시 관리
COLUMN 샘플 애플리케이션의 주의점
__4.2.3 뉴스 게시 기능
_4.3 루비로 레디스 작업
__4.3.1 redis-rb로 작업
__4.3.2 투표 관리
_4.4 파이썬으로 레디스 작업
__4.4.1 aioredis로 작업
__4.4.2 실시간 채팅
COLUMN 적절한 자료형 선택
[PART 02 실전]
CHAPTER 05 레디스 운용 관리
_5.1 데이터 영속성
__5.1.1 스냅숏
COLUMN CRC
__5.1.2 AOF
__5.1.3 스냅숏과 AOF 비교
__5.1.4 데이터 삭제 패턴
COLUMN RDB 파일 형식
_5.2 캐시 서버로서 레디스 아키텍처
__5.2.1 읽기 관점 아키텍처
__5.2.2 쓰기 관점 아키텍처
__5.2.3 아키텍처 안티 패턴
__5.2.4 데이터 저장소로서의 레디스 아키텍처
_5.3 모범 사례
__5.3.1 TTL 설정
__5.3.2 제거 정책 설정
__5.3.3 백업
__5.3.4 커넥션 풀링
__5.3.5 재시도 처리
__5.3.6 기타 모범 사례
_5.4 캐시 노드 크기 조정
__5.4.1 크기 조정 기준
_5.5 설정 파일 redis.conf
_5.6 보안
__5.6.1 보안 설정
__5.6.2 ACL기능
_5.7 벤치마크
COLUMN 레디스와 멤케시디 벤치마크
_5.8 멀티 스레드 처리
_5.9 DEBUG 명령어
COLUMN 데이터베이스
CHAPTER 06 트러블슈팅 397
_6.1 INFO 명령어로 서버 정보 읽기
COLUMN RSS
_6.2 지연 시간 조사
__6.2.1 슬로우 로그
__6.2.2 redis-cli 옵션
__6.2.3 지연 시간 모니터링
COLUMN 소프트웨어 워치독
_6.3 메모리 문제
CHAPTER 07 레플리케이션
_7.1 레플리케이션 기능
__7.1.1 비동기 처리를 통한 구현
__7.1.2 레플리케이션 사용할 때 레디스를 연결하는 방법
__7.1.3 기본적으로 읽기 전용인 레플리카
__7.1.4 마이그레이션으로 활용하기
__7.1.5 레플리케이션 주의사항
COLUMN 마스터/슬레이브에서 마스터/레플리카로
_7.2 레플리케이션을 시작할 때의 메커니즘
__7.2.1 전체 동기화
__7.2.2 부분 동기화
COLUMN 레플리케이션 연결이 끊겼을 때의 동작 개선
_7.3 레플리케이션 동작 중 메커니즘
__7.3.1 마스터와 레플리카 간의 연결 상태 모니터링
_7.4 페일오버
COLUMN 레플리케이션 시 이페머럴 스크립트
_7.5 레플리케이션 도입 방법
COLUMN Systemd로 실행하는 경우
COLUMN 페일오버 동작
COLUMN 레디스 센티널
CHAPTER 08 레디스 클러스터
_8.1 레디스 클러스터 기능 개요
__8.1.1 레디스 클러스터의 장점
__8.1.2 레디스 클러스터가 사용하는 두 개의 TCP 포트
__8.1.3 동작 메커니즘
COLUMN 접근 노드에 편향이 발생하는 경우
_8.2 레디스 클러스터 장애 탐지
__8.2.1 장애 탐지 메커니즘
__8.2.2 레플리카 선출
_8.3 레디스 클러스터 키워드
__8.3.1 슬롯
__8.3.2 해시태그
__8.3.3 클러스터 버스
__8.3.4 파티셔닝
_8.4 레디스 클러스터 지원 클라이언트
__8.4.1 MOVED 리다이렉트와 ASK 리다이렉트
__8.4.2 레디스 클러스터 지원 클라이언트 동작
__8.4.3 레디스 클러스터 지원 클라이언트 사용 방법
_8.5 레디스 클러스터 관련 명령어
_8.6 레디스 클러스터 설치 방법
__8.6.1 모든 마스터 혹은 모든 레플리카에 특정 작업 실행
COLUMN 레디스 클러스터 페일오버 동작
COLUMN 로그 양식
CHAPTER 09 메모리 관리
_9.1 메모리 관리 아키텍처
__9.1.1 INFO Memory 출력 결과 해석
__9.1.2 클라이언트 출력 버퍼
_9.2 키 만료
__9.2.1 만료 방법
__9.2.2 삭제 정책
_9.3 메모리를 효율적으로 사용하기 위한 기타 방법
__9.3.1 동적 리해싱
__9.3.2 동적 단편화 제거
COLUMN zmalloc
CHAPTER 10 클라우드에서 사용하는 레디스
_10.1 OSS와 레디스의 차이
__10.1.1 고유 기능
__10.1.2 제한
COLUMN Amazon MemoryDB for Redis
_10.2 클라우드에서 사용하는 방법
__10.2.1 엔드포인트
_10.3 클라우드를 활용한 트러블슈팅
__10.3.1 최소한으로 모니터링을 해야 하는 메트릭
__10.3.2 주의해야 하는 메트릭
__10.3.3 유지보수 창 주의사항
__10.3.4 이벤트 확인
[PART 03 고급]
CHAPTER 11 레디스의 구조
_11.1 레디스 관련 기술
__11.1.1 RESP
COLUMN RESP 형식이 아닌 쿼리 요청 처리
__11.1.2 SDS
__11.1.3 ae
__11.1.4 RAX
__11.1.5 CoW
__11.1.6 Raft
__11.1.7 HyperLogLog
_11.2 소스코드를 통해 살펴 본 레디스
__11.2.1 여러 파일 개요
__11.2.2 해시 테이블
__11.2.3 여러 명령어의 정의
__11.2.4 클라이언트 정의
__11.2.5 서버 정의
__11.2.6 내부 인코딩
COLUMN zipmap
APPENDIX A. 레디스 계속해서 활용하기
_A.1 멤케시디와의 기능 및 동작 비교
__A.1.1 간단한 형태의 데이터 저장
__A.1.2 간단하고 불필요한 기능 없는 안정적인 동작
__A.1.3 슬랩 클래스 단위로 LRU를 통한 데이터 관리
__A.1.4 멀티 스레드를 통한 이벤트 기반 처리
__A.1.5 상호 독립적인 노드
__A.1.6 명령어 특징
__A.1.7 네트워크 및 통신 관련
__A.1.8 고성능 인메모리 KVS
_A.2 앞으로의 레디스
__A.2.1 Hash형의 TTL 강화
__A.2.2 더욱 신뢰할 수 있는 키 공간 알림
__A.2.3 키 어노테이션
__A.2.4 레디스 클러스터 개선
Author
하야시 쇼고,서대원,정경석
2017년에 AWS에 합류한 Amazon EMR 개발 팀의 시스템 개발 엔지니어이다. 5년간 AWS에서 기술 지원을 담당했으며, 레디스/멤케시디와 로드 밸런서를 비롯한 다양한 분야에서 회사 내 전문가로 활동했다. 또한 회사 내 개발 팀과 협력하여 문제 해결 등의 업무를 수행했다. 현재는 Amazon EMR의 릴리스 주변 컴포넌트 개발을 담당하고 있다.
2017년에 AWS에 합류한 Amazon EMR 개발 팀의 시스템 개발 엔지니어이다. 5년간 AWS에서 기술 지원을 담당했으며, 레디스/멤케시디와 로드 밸런서를 비롯한 다양한 분야에서 회사 내 전문가로 활동했다. 또한 회사 내 개발 팀과 협력하여 문제 해결 등의 업무를 수행했다. 현재는 Amazon EMR의 릴리스 주변 컴포넌트 개발을 담당하고 있다.