Redis(Remote Dictionary Server)
- 키-값 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형(NoSQL) DB 관리 시스템
- 쿼리가 아닌 커맨드 기반
- Disk가 아닌 In-memory 방식
- Single Thread로 동작
Redis를 사용하는 이유
- 데이터를 아주 빠르게 저장하고 가져올 수 있기 때문
Redis가 빠른 이유
- 모든 데이터가 메모리에 저장됨
- 대부분의 DB가 정보를 컴퓨터의 메모리와 하드 드라이브에 저장
- 메모리는 데이터를 빠르게 액세스 할 수 있지만 하드 디스크의 데이터를 액세스 하는 건 비교적 느림
- Redis는 하드 디스크에 정보를 저장하지 않고 모든 데이터를 메모리에 저장
- Redis가 모든 데이터를 아주 단순한 구조로 관리하기 때문
- 중요한 점은 모든 데이터가 연결 리스트, 정렬 세트, 해시 맵과 같은 고전적인 자료 구조로 관리된다는 점
- Redis가 기본적으로 아주 단순하기 때문
- PostgreSQL이나 MySQL과 같은 DB는 사용하기 쉽도록 다양한 기능이 더해져 있지만 기능이 추가된 만큼 성능이 저하됨
- Redis는 완전히 다르게 접근해 DB에 다양한 기능을 추가하지 않아 아주 단순
따라서 Redis를 사용하려면 제한된 공간에 데이터를 저장하는 방법을 이해하고 단순한 자료구조로 데이터를 관리하는 방법을 알아야 하며, 제한된 기능 세트만을 가지고 작업하는 방법을 익혀야 함
Redis의 단점
- 기본적으로 컴퓨터의 메모리 크기보다 더 큰 데이터셋을 가지고 작업하는 게 어려움
- 예를 들어, 데이터셋의 크기가 100GB인데 컴퓨터의 메모리 크기가 8GB라면 메모리에 다 넣을 수 없음
어디에서 사용하는가
- 주로 캐싱, 세션 관리, 메시지 브로커, 대기열 처리 등
- Pub-Sub 메커니즘을 통해 메시지 브로커로 활용
- 클라이언트 간 메시지 전달 및 이벤트 기반 아키텍처에서 활용
- 웹 애플리케이션, 게임 서버, 실시간 분석, 캐싱, 대기열 처리 등 다양한 분야
Windows에 설치하기
https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/docker/
- https://docs.docker.com/desktop/install/windows-install/에서 Docker Desktop for Windows로 다운로드하여 설치
- 터미널에서 다음 명령어를 실행
- docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest
- 로컬 Redis 서버를 연결하여 명령을 실행하려면 다음 명령어를 실행
- docker exec -it redis-stack-server redis-cli
- 127.0.0.1:6379>와 같이 표시되면 명령어를 입력받을 준비가 됨
데이터를 추가하고 쿼리하는 명령어
SET : DB에 문자열을 저장하는 명령어
SET key value
SET 명령어의 옵션으로 GET을 입력하면 키를 설정했을 때 이전에 저장되어 있던 값을 반환
SET key value GET
SET 명령어의 옵션으로 XX를 입력하면 Redis에 키가 이미 존재하는 경우에만 SET 명령어가 실행
SET key value XX
SET 명령어의 옵션으로 NX를 입력하면 Redis에 키가 존재하지 않는 경우에만 SET 명령어가 실행 (XX와 정반대로 실행)
SET key value NX
SET 명령어의 옵션으로 EX를 입력하면 지정된 시간이 지난 뒤 데이터 자동 삭제(EX + 초 단위 시간 지정)
SET 명령어의 옵션으로 PX를 입력하면 지정된 시간이 지난 뒤 데이터 자동 삭제(EX + 밀리초 단위 시간 지정)
SET key value [ EX | PX ] 정숫값
SETNX : SET에 NX옵션을 설정한 것과 동일
SETNX key value
SETEX : SET에 EX 옵션을 설정한 것과 동일
SETEX key 정숫값 value
MSET : M은 Multiple을 나타냄, 같은 명령어 안에서 키-값 쌍을 계속해서 입력할 수 있음
MSET key1 value1 key2 value2 ...
MSETNX : 설정하려는 키 중 이미 존재하는 키가 하나라도 있다면 명렁어가 실행되지 않음
MSETNX key1 value1 key2 value2 ...
GET : DB에 저장된 문자열을 조회하는 명령어
GET key
MGET : 여러 키의 값을 가져옴
MGET key1 key2 ...
DEL : DB에 존재하는 키와 저장된 데이터를 삭제(모든 자료형에 사용 가능)
DEL key
'TIL(Today I Learned)' 카테고리의 다른 글
TIL - Swagger ui에서 Json 데이터와 첨부 파일 업로드 시도 (0) | 2024.05.27 |
---|---|
ESLint - missing in props validation (0) | 2024.05.24 |
TIL - Swagger에서 Bearer Token 설정 (0) | 2024.05.22 |
TIL - JWT Token 생성 및 검증(Access Token, Refresh Token) (0) | 2024.05.21 |
TIL - Java 8 date/time type `java.time.LocalDateTime` not supported (0) | 2024.05.20 |