1. Redis 란?
DB-Engines Ranking
Popularity ranking of database management systems.
db-engines.com
[백엔드/기타] 인메모리 데이터베이스
1. 인메모리 데이터베이스(in-memory database)메모리에 데이터를 적재하여 활용하는 데이터베이스 인메모리 데이터베이스 주요 특징1. Millisecond response(1ms = 0.001s)디스크 대비 매우 빠른 응답 속도대
progfrog.tistory.com
- Remote Dictionary Server
- in-memory, key-value 데이터 저장소를 지원하는 오픈소스 데이터베이스
- 빠른 속도와 이식성에 강점을 갖는 C언어로 개발되어 있음!
- 초당 5만~25만 Request 실행 가능
- Persistent On Disk
[Redis] RDB와 AOF
개요Redis는 비휘발성 데이터 저장을 위해 두 가지 주요 방식인 RDB (Redis Database)와 AOF (Append-Only File)를 제공각각의 방식은 데이터의 영속성과 복구를 다루는 방법이 다르며, 각자의 장단점이 있다.
progfrog.tistory.com
- Data types
- Strings, Lists, Sets, Hashes, Sorted sets
- Single Thread
- 외부로부터 동시에 여러 명령을 전달받을 수 있지만, 실질적으로는 순차적으로 하나씩 처리됨
- 내부적으로 락을 사용하지 않아도 원자적 실행이 가능하게 하며, 이를 통해서 데이터 일관성을 보장할 수 있음
- 단일 처리가 주는 이점으로 병렬처리보다 복잡성을 줄일 수 있고, 단순함을 유지할 수 있음
- 싱글 스레드 구조임에도 불구하고 초당 10만 건까지 지연 없이 처리가 가능하다고 알려져 있음
- 그럼에도 명령어가 쌓이면, 응답 시간이 늦어질 수 있고 이것은 서비스 장애로 이어질 수 있기 때문에 유의해야 한다.
- O(n) 알고리즘으로 처리되는 명령어에 대해서는 주의 깊게 사용해야 한다.
- KEYS → SCAN을 사용하여 일부 회피 가능
- LINSERT (List)
- HKEYS, HGETALL (Hash)
- SMEMBERS (Set)
- O(n) 알고리즘으로 처리되는 명령어에 대해서는 주의 깊게 사용해야 한다.
- Redis 6.0 이상부터는 성능 향상을 위해서 Thread I/O가 도입
[Redis] Thread I/O
개요Redis 6.0 이상부터 도입된 Thread I/O는 Redis의 I/O 처리 성능을 향상시키기 위한 중요한 기능Redis는 기본적으로 싱글 스레드로 동작하기 때문에, 높은 성능을 유지하면서도 멀티 코어를 활용할
progfrog.tistory.com
2. 활용 사례
- 자주 사용하지만 잘 수정되지 않는 데이터를 캐싱하는 데 사용
- 데이터베이스 부하를 줄일 수 있다!
- 세션 스토어로써의 사용
- TTL을 사용해서 오래된 세션 데이터를 삭제할 수 있다
- Pub/Sub
- 메시지 브로커로써 클라이언트들끼리 메시지를 주고받을 수 있게 기능을 제공
- 비동기 처리 목적으로 사용하거나,
- 실시간 채팅과 같이 메시지 중계를 위한 기능으로도 활용이 된다.
- 메시지 큐
- 메시지를 Redis에 저장하고, 해당 메시지를 필요로 하는 서버에서 데이터를 요청한 순서대로 데이터를 가져가 처리할 수 있음
- 지리공간데이터
- 위경도 정보를 Redis에 저장
- 현재 내 위치로부터 반경 몇 km까지 데이터가 있는지 질의하고 데이터를 얻어내는 데 유용하게 활용될 수 있다.
- leader board
- 사용자들 간 경쟁할 수 있는 점수체계(랭킹 시스템)
- Sorted Sets 자료 구조를 통해 손쉽게 랭킹 정보를 얻어낼 수 있다.
3. Redis 설치
docker run -d -p 6379:6379 --name idol-redis redis:6.2
- 버전은 redis 6.2 사용
- 백그라운드로 실행하고, 호스트 6379 포트에 컨테이너 6379 포트를 포트포워딩
- 컨테이너 이름은 idol-redis로 지정
4. Redis CLI을 통한 접속
https://redis.io/docs/latest/develop/connect/cli/
docker exec -it idol-redis redis-cli
- redis-cli monitor
- 의도한 대로 명령어가 내려졌는지 확인할 때 유용
- slowlog get
- 명령어 처리 과정에서 시간이 많이 소요된 결과들을 확인할 수 있음
- 처리 시간이 10ms(기본값) 이상 소요된 명령에 대해서 별도 기록을 하게 됨
format
1) ID
2) 수행시간
3) 수행시간(microsecond)
4) 명령
5) client ip/port
6) client name
- info
- 버전
- 시스템의 여러 정보
- 클라이언트 연결 개수
- 메모리 정보
- persist 설정
- 등 다양한 정보들을 조회할 때 사용
- redis-cli --stat
- 실시간으로 Redis 서버의 통계 정보를 모니터링할 수 있는 명령어
- 이 명령어는 Redis 서버에 연결하여, 다양한 통계 정보를 주기적으로 업데이트하면서 화면에 표시함
- 이를 통해 Redis 서버의 상태와 성능을 실시간으로 확인할 수 있음!
- 기본적으로 1초 간격으로 데이터를 업데이트하며, 간격을 변경하고 싶다면 -i 옵션을 사용할 수 있다.
- 예를 들어 0.5초 간격으로 업데이트하려면 다음과 같이 사용할 수 있다.
- redis-cli --stat -i 0.5
표시되는 통계 정보
- CPU 사용량
- 메모리 사용량
- 현재 연결된 클라이언트 수
- 초당 처리되는 명령어 수
- 네트워크 입출력 비율
- 현재 저장된 키의 총 개수
- 서버의 네트워크 입출력 트래픽
- 논리적인 데이터베이스 설정하기
- 주로 데이터 분리를 위해 다중 데이터베이스 기능을 제공
- Redis는 16개의 논리적 데이터베이스를 지원
- 이 데이터베이스들은 0번부터 15번까지 번호가 매겨져 있다.
- 각 데이터베이스는 별도의 키-값 저장소로 작동한다.
- Redis 서버의 설정 파일(redis.conf)에서 데이터베이스의 개수를 설정할 수 있다. 기본 설정은 16개
- database 16
- SELECT 명령을 사용하여, 데이터베이스를 선택할 수 있다. 번호는 0번부터 시작
- SELECT 0
- 모든 키-값 저장 및 조회 작업 이 데이터베이스에서 이루어진다.
5. Redis 벤치마크
- Redis 벤치마크는 Redis 서버의 성능을 평가하기 위한 테스트를 의미
- 이를 통해 데이터베이스의 처리량, 응답 시간, 성능 병목 등을 파악할 수 있음
- 벤치마크를 수행함으로써 Redis의 설정을 최적화하고 애플리케이션의 성능을 개선하는 데 도움이 됨
docker exec -it idol-redis /bin/bash
redis-benchmark
→ Redis와 함께 기본으로 제공되는 도구로, 다양한 데이터 구조에 대해 여러 명령어를 실행하여 성능을 측정할 수 있다.
redis-benchmark -h <host> -p <port> -n <number_of_requests> -c <concurrent_connections> -t <commands>
- -h: 호스트
- -p: 포트
- -n: 요청 수
- -c: 동시 연결 수
- -t: 테스트할 명령어
6. GUI 툴
RedisInsight - The Best Redis GUI
RedisInsight provides an intuitive and efficient graphical interface for Redis, allowing you to interact with your databases and manage your data.
redis.io