설치와 CLI
설치
macOS
brew install redis
# 서비스로 시작
brew services start redis
# 직접 실행
redis-server
# 설정 파일 위치
/opt/homebrew/etc/redis.confUbuntu/Debian
sudo apt update
sudo apt install redis-server
# 서비스 시작
sudo systemctl start redis-server
sudo systemctl enable redis-server
# 상태 확인
sudo systemctl status redis-serverDocker
# 단순 실행
docker run -d --name redis -p 6379:6379 redis:7.2
# 설정 파일과 데이터 볼륨 마운트
docker run -d \
--name redis \
-p 6379:6379 \
-v $(pwd)/redis.conf:/usr/local/etc/redis/redis.conf \
-v $(pwd)/data:/data \
redis:7.2 redis-server /usr/local/etc/redis/redis.conf
# Redis CLI 접속
docker exec -it redis redis-cliDocker Compose
# docker-compose.yml
version: '3.8'
services:
redis:
image: redis:7.2
container_name: redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
- ./redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
restart: unless-stopped
volumes:
redis-data:redis.conf 핵심 설정
# 바인드 주소 (0.0.0.0은 모든 인터페이스)
bind 127.0.0.1
# 포트 (기본 6379)
port 6379
# 백그라운드 실행
daemonize yes
# 비밀번호
requirepass your-strong-password
# 최대 메모리
maxmemory 2gb
maxmemory-policy allkeys-lru
# 영속성
save 900 1 # 900초 내 1번 변경 시 저장
save 300 10 # 300초 내 10번 변경 시 저장
save 60 10000 # 60초 내 10000번 변경 시 저장
# AOF
appendonly yes
appendfsync everysec
# 로그
logfile /var/log/redis/redis-server.log
loglevel notice
# 데이터 디렉터리
dir /var/lib/redis
# 데이터베이스 수 (기본 16)
databases 16redis-cli 기본 사용
접속
# 로컬 기본 접속
redis-cli
# 호스트/포트 지정
redis-cli -h 192.168.1.100 -p 6379
# 비밀번호
redis-cli -a your-password
# 특정 DB 선택 (0~15)
redis-cli -n 1
# 원격 + 인증
redis-cli -h redis.example.com -p 6379 -a password
# TLS
redis-cli --tls --cacert /path/to/ca.crt직접 명령 실행
# 단일 명령
redis-cli SET name "alice"
redis-cli GET name
# 파이프라인 모드
cat commands.txt | redis-cli --pipe
# 반복 실행
redis-cli -r 100 -i 0.1 INFO keyspace # 0.1초마다 100번CLI 핵심 명령어
서버 정보
# 서버 상태 전체
INFO
# 특정 섹션
INFO server
INFO clients
INFO memory
INFO stats
INFO replication
INFO keyspace
# 설정 확인
CONFIG GET maxmemory
CONFIG GET bind
CONFIG GET * # 전체
# 설정 동적 변경
CONFIG SET maxmemory 4gb
CONFIG SET loglevel debug
# 설정 디스크 저장
CONFIG REWRITE데이터베이스
# DB 선택 (0~15)
SELECT 0
SELECT 1
# 현재 DB 키 수
DBSIZE
# 전체 키 패턴 검색 (프로덕션 주의!)
KEYS *
KEYS user:*
KEYS "user:*:profile"
# 안전한 키 순회 (KEYS 대신 사용)
SCAN 0 MATCH user:* COUNT 100
# 현재 DB 모든 키 삭제
FLUSHDB
# 전체 DB 삭제
FLUSHALL
# 비동기 삭제 (블로킹 없음)
FLUSHDB ASYNC
FLUSHALL ASYNC키 관련
# 키 존재 여부
EXISTS user:1
# 키 타입
TYPE user:1 # string, list, set, zset, hash, stream
# 키 이름 변경
RENAME old-key new-key
RENAMENX old-key new-key # new-key 없을 때만
# 키 삭제
DEL key1 key2 key3
# 비동기 삭제 (큰 자료구조에 유용)
UNLINK key1 key2
# TTL 확인
TTL key # 남은 시간(초), -1=영구, -2=없는 키
PTTL key # 밀리초
# TTL 설정
EXPIRE key 3600 # 초
PEXPIRE key 3600000 # 밀리초
EXPIREAT key 1700000000 # 유닉스 타임스탬프
# TTL 제거 (영구로 변경)
PERSIST key
# 키 직렬화
DUMP key
RESTORE key 0 <serialized>
# 키를 다른 서버로 이동
MIGRATE host port key destination-db timeout디버깅
# 느린 쿼리 로그
SLOWLOG GET 10 # 최근 10개
SLOWLOG LEN # 로그 수
SLOWLOG RESET # 초기화
# 명령어 실행 시간 측정
DEBUG SLEEP 0 # 서버 응답 시간 테스트
# 메모리 사용량
MEMORY USAGE key # 특정 키의 메모리 사용량 (bytes)
MEMORY DOCTOR # 메모리 이슈 진단
# 객체 인코딩 확인
OBJECT ENCODING key
OBJECT IDLETIME key # 마지막 접근 후 경과 시간
OBJECT REFCOUNT key # 참조 카운트
OBJECT FREQ key # 접근 빈도 (LFU 정책 시)
# 실시간 명령어 모니터링 (프로덕션 주의!)
MONITORSCAN — 안전한 키 순회
# SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
# 기본 사용
SCAN 0
# 패턴 매칭
SCAN 0 MATCH "user:*" COUNT 100
# 타입 필터
SCAN 0 TYPE hash COUNT 100
# 전체 순회 스크립트
cursor=0
while true; do
result=$(redis-cli SCAN $cursor MATCH "session:*" COUNT 100)
cursor=$(echo "$result" | head -1)
keys=$(echo "$result" | tail -n +2)
echo "$keys"
[ "$cursor" = "0" ] && break
done
# 관련 명령어
HSCAN hash-key 0 MATCH field:* COUNT 100 # Hash 순회
SSCAN set-key 0 COUNT 100 # Set 순회
ZSCAN zset-key 0 COUNT 100 # Sorted Set 순회RESP 프로토콜
Redis Serialization Protocol — 클라이언트-서버 통신 프로토콜.
데이터 타입:
+ 단순 문자열: +OK\r\n
- 에러: -ERR unknown command\r\n
: 정수: :1000\r\n
$ 벌크 문자열: $6\r\nfoobar\r\n
* 배열: *2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n
예시 — SET foo bar:
클라이언트: *3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\nbar\r\n
서버: +OK\r\n
예시 — GET foo:
클라이언트: *2\r\n$3\r\nGET\r\n$3\r\nfoo\r\n
서버: $3\r\nbar\r\n
# netcat으로 직접 확인
echo -e "*2\r\n\$4\r\nINFO\r\n\$6\r\nserver\r\n" | nc localhost 6379유용한 CLI 팁
# 모든 키 개수
redis-cli DBSIZE
# 특정 패턴 키 삭제 (SCAN 활용)
redis-cli --scan --pattern "cache:*" | xargs redis-cli DEL
# 키 메모리 사용량 상위 10개
redis-cli --bigkeys
# 전체 키 분석
redis-cli --hotkeys # maxmemory-policy=allkeys-lfu 필요
# 지연 모니터링
redis-cli --latency
redis-cli --latency-history
redis-cli --latency-dist
# 통계 모니터링
redis-cli --stat
# RDB 파일을 JSON으로 변환 (rdbtools 설치 필요)
rdb --command json /var/lib/redis/dump.rdb정리
redis-cli: 대화형 CLI,-h/-p/-a옵션으로 원격 접속SCAN>KEYS: 프로덕션에서 대량 키 조회는 항상 SCAN 사용CONFIG GET/SET: 런타임 설정 변경 가능SLOWLOG GET: 느린 명령어 추적MEMORY USAGE key: 특정 키의 메모리 사용량 분석--bigkeys: 전체 키 중 메모리 사용량 큰 키 탐지