- DB, 캐시, 메시지 브로커 등으로 사용되는 오픈소스 in-memory 저장소
- 보통은 DB 앞단에 두어 Cache 타입으로 많이 사용한다
CLI
- brew를 통해 Mac 기준 로컬에서 Redis를 간단하게 세팅할 수 있다
brew install redis
brew services start redis # start 대신 stop, restart도 가능
- redis-cli를 통해 Redis 클러스터에 접속 및 데이터를 확인할 수 있다, 설치는 brew 통해 가능
redis-cli -h {{접속 도메인}} -p {{접속 포트}} -c
# c 옵션은 value를 확인할 때 사용, 이게 없으면 get 명령어를 사용할 수 없다
기본 명령어
keys * # 모든 key 확인
keys *a* # a를 포함한 key 확인
get "abc" # key가 abc인 value 확인
del "abc" # key가 abc인 데이터 삭제
setnx key "abc"
# key가 abc 값 세팅, key가 없으면 1, 있으면 0으로 key 유무까지 확인 가능 (Lock)
exists "abc" # key가 abc인게 있는지 체크 (Lock X)
구조
Single Thread
- Redis는 싱글 스레드 모델인데, 패킷 단위로 명령어들을 받아 수행한다
- 패킷은 Client와 Redis 간의 통신 단위를 뜻하며, “SET mykey myvalue” 이런 형태의 명령이 하나의 패킷으로 분할하여 Redis로 전송되는 것
- 패킷이 모여 처리되는 과정이 ProcessCommand이며, 이는 패킷이 Client로부터 도착한 순서대로 처리, 실행하는 것을 의미한다
- 단순한 GET, SET 명령어는 괜찮지만 KEYS, FLUSHALL 등의 명령어는 데이터 Full Scan을 하기에 자칫하다간 병목이 발생할 수 있다
Memory
- Redis가 싱글 스레드 모델을 채택한 이유 중 하나가 Memory와 연관이 있는데 다음과 같다
- Memory Access 지연 감소 : Redis는 데이터를 저장하고 빠르게 제공하는 것이 목적이기에, 데이터를 Memory에 저장하고 직접 Access하여 관리한다, 그래서 속도가 매우 빠른 편