1편. Redis 설치 및 기본 명령어 정리
📚 목차
1. Redis와 실습 환경 이해하기
2. Docker로 Redis 설치 및 실행하기
3. Redis 기본 설정 이해하기
4. redis-cli와 기본 명령어 정리
📂 [GitHub 코드 보러가기] : https://github.com/cericube/nodejs-practice-lab/tree/main/redis-examples
1. Redis와 실습 환경 이해하기
🔷 Redis 란
2026.05.26 - [5. IT기술노트/인프라&개발] - Redis의 기술적 특징과 고성능 데이터 처리 구조
Redis는 메모리에 데이터를 저장하는 key-value 기반 데이터 저장소입니다.
일반적인 관계형 데이터베이스처럼 영구 데이터를 중심으로 다루기보다는, 빠르게 읽고 써야 하는 데이터를 처리할 때 자주 사용합니다.
대표적으로 다음과 같은 상황에서 많이 사용됩니다.
- 캐시
- 세션 저장
- 인증 코드 저장
- 조회수 카운터
- Rate Limiting
- 좋아요 사용자 목록
- 인기 게시글 랭킹
- 최근 본 게시글 목록
- 비동기 이벤트 큐
- 실시간 알림
Redis는 모든 데이터를 key 기준으로 저장합니다.
그리고 value에는 단순 문자열뿐만 아니라 Hash, List, Set, Sorted Set, Stream 같은 다양한 자료구조를 사용할 수 있습니다.
🔷 실습 환경
실습 환경은 다음과 같습니다.
- Windows
- WSL 2 또는 Linux 환경
- Docker
- Docker Compose
- Redis 8.x
Redis는 직접 OS에 설치할 수도 있지만, 실습에서는 Docker를 사용하는 것이 편합니다.
Docker를 사용하면 Redis 서버를 쉽게 생성, 중지, 삭제할 수 있고, 여러 실습 환경을 반복해서 구성하기도 쉽습니다
2. Docker로 Redis 설치 및 실행하기
🔷 WSL 및 Docker 설치
Redis를 설치하는 방식은 크게 네 가지 정도로 나눌 수 있으나 이 글 에서는 Docker 방식을 살펴보겠습니다.
2025.03.25 - [1.시스템&인프라/가상화(WSL,VirtualBox,Docker)] - Windows에서 WSL 2 설치 및 명령어 정리
2025.03.26 - [1.시스템&인프라/가상화(WSL,VirtualBox,Docker)] - WSL 2에 Ubuntu 설치하고 Export/Import로 복제하기
2025.03.27 - [1.시스템&인프라/가상화(WSL,VirtualBox,Docker)] - [Docker]2.Ubuntu에 Docker 설치
2025.03.27 - [1.시스템&인프라/가상화(WSL,VirtualBox,Docker)] - [Docker]4.Docker 명령어 정리(예제 + 설명)
🔷 Redis 설치
Redis를 설치하는 방식은 크게 네 가지 정도로 나눌 수 있으나 이 글 에서는 Docker 방식을 살펴보겠습니다.
# redis 8.6 버전을 실행합니다.
# 만역 설치가 안되어 있으면 자동으로 설치합니다.
sudo docker run -d --name redis -p6379:6379 redis:8.6
# 컨테이너가 실행중인지 확인
sudo docker ps
# Redis CLI 접속
sudo docker exec -it redis redis-cli
# redis 종료
sudo docker stop redis


접속 후 PING 명령어를 실행합니다.
PONG이 출력되면 Redis 서버가 정상적으로 동작하는 것입니다.
🔷 docker-compose.yml로 Redis 구성하기
Docker 는 컨테이너를 만들고 실행하는 기본 도구이고,
Docker Compose 는 여러 컨테이너를 하나의 애플리케이션처럼 묶어서 실행·관리하는 도구입니다.
services:
redis:
image: redis:8.6
container_name: local-redis
ports:
- "6379:6379"
volumes:
# redis_data:/data는 Docker 볼륨을 Redis 컨테이너의 /data 디렉터리에 연결한다는 뜻입니다.
- redis_data:/data
command: redis-server --appendonly yes
volumes:
redis_data:
위 설정은 Redis를 local-redis라는 이름의 컨테이너로 실행합니다.
redis_data:/data는 Docker 볼륨을 Redis 컨테이너의 /data 디렉터리에 연결하는 설정입니다.
Redis는 기본적으로 메모리에 데이터를 저장하지만, RDB 또는 AOF persistence를 사용하면 데이터를 디스크에도 저장할 수 있습니다.
🔷 Docker Compose 실행 및 확인
# 실행
sudo docker compose up -d
# 상태 확인
sudo docker compose ps
# Redis CLI 접속
sudo docker exec -it local-redis redis-cli
# 볼륨 확인
sudo docker volume ls
# Docker named volume이 실제로 어디에 저장되는지 확인
sudo docker volume inspect workspace_redis_data
ex) "Mountpoint": "/var/lib/docker/volumes/workspace_redis_data/_data",
# 종료
sudo docker compose down

3. Redis 기본 설정 이해하기
🔷 redis.conf 주요 설정
Redis 설정은 보통 redis.conf 파일에서 관리합니다.
대표적인 설정은 다음과 같습니다.
bind 127.0.0.1
port 6379
requirepass your_password
maxmemory 256mb
maxmemory-policy allkeys-lru
appendonly yes
| 설정 | 의미 |
| bind | Redis가 바인딩할 네트워크 인터페이스 |
| port | Redis 서버 포트 |
| requirepass | Redis 접속 비밀번호 |
| maxmemory | Redis가 사용할 최대 메모리 |
| maxmemory-policy | 메모리 초과 시 key 제거 정책 |
| appendonly | AOF persistence 사용 여부 |
🔷 비밀번호 설정과 접속 방법
Redis에 비밀번호를 설정하려면 requirepass 옵션을 사용합니다.
requirepass mypassword
Docker Compose에서 직접 설정하려면 다음처럼 command 옵션에 추가할 수 있습니다.
services:
redis:
image: redis:8.6
container_name: local-redis
ports:
- "6379:6379"
command: redis-server --requirepass mypassword --appendonly yes
비밀번호가 설정된 Redis에 접속하면 바로 명령어를 사용할 수 없습니다.
> docker exec -it local-redis redis-cli
127.0.0.1:6379> PING
(error) NOAUTH Authentication required.
# 이 경우 AUTH 명령어로 인증합니다.
127.0.0.1:6379> AUTH mypassword
OK
127.0.0.1:6379> PING
PONG
처음부터 비밀번호를 함께 전달할 수도 있습니다.
docker exec -it local-redis redis-cli -a mypassword
🔷 maxmemory와 Eviction Policy
Redis가 사용할 수 있는 메모리 한도를 설정할 수 있습니다.
maxmemory 256mb
Redis가 maxmemory에 도달했을 때 어떤 데이터를 제거할지 결정하는 정책을 Eviction Policy라고 합니다.
LRU(Least Recently Used) 최근에 덜 사용된 데이터를 제거
maxmemory-policy allkeys-lru
| 정책 | 설명 |
| noeviction | 메모리가 가득 차면 쓰기 요청에 에러 반환 |
| allkeys-lru | 전체 key 중 LRU( 기준으로 제거 |
| volatile-lru | expire가 설정된 key 중 LRU 기준으로 제거 |
| allkeys-random | 전체 key 중 랜덤 제거 |
| volatile-random | expire가 설정된 key 중 랜덤 제거 |
| volatile-ttl | expire가 설정된 key 중 TTL이 짧은 key 우선 제거 |
캐시 서버로 Redis를 사용할 때는 allkeys-lru 계열을 자주 고려합니다.
반대로 중요한 임시 데이터나 큐 데이터를 저장하는 Redis라면, key가 임의로 제거되는 정책이 위험할 수 있습니다.
🔷 RDB와 AOF Persistence
Redis는 기본적으로 메모리에 데이터를 저장하지만, 설정에 따라 디스크에도 데이터를 저장할 수 있습니다. 이를 Persistence라고 합니다
Redis의 대표적인 persistence 방식은 RDB와 AOF입니다.
| 구분 | RDB | AOF |
| 저장 방식 | 특정 시점의 데이터를 스냅샷 파일로 저장 | Redis에 들어온 쓰기 명령을 로그 형태로 계속 기록 |
| 저장 단위 | 데이터 전체 상태 | 실행된 쓰기 명령 |
| 대표 설정 | save 900 1 save 300 10 save 60 10000 |
appendonly yes appendfsync everysec |
| 장점 | 파일 크기가 비교적 작음 복구 속도가 빠른 편 백업 파일로 관리하기 좋음 |
데이터 유실 가능성이 상대적으로 낮음 쓰기 명령 기반으로 복구 가능 운영 환경에서 안정성 확보에 유리 |
| 단점 | 마지막 스냅샷 이후 데이터는 유실될 수 있음 | RDB보다 파일 크기가 커질 수 있음 fsync 정책에 따라 성능 영향이 있을 수 있음 |
| 적합한 경우 | 캐시처럼 일부 데이터 유실이 허용되는 경우 빠른 백업과 복구가 중요한 경우 |
세션, 큐, 중요한 임시 데이터처럼 유실을 줄여야 하는 경우 |
| 개발 환경 추천 | 기본 설정으로도 충분히 실습 가능 | 데이터 유지 실습을 위해 appendonly yes 설정 추천 |
| 운영 환경 고려사항 | 스냅샷 주기와 데이터 유실 허용 범위를 검토해야 함 | appendfsync everysec를 많이 사용하며 성능과 안정성 균형을 고려해야 함 |
RDB 설정 예시는 다음과 같습니다.
| 설정 | 의미 |
| save 900 1 | 900초 동안 1개 이상 변경되면 스냅샷 저장 |
| save 300 10 | 300초 동안 10개 이상 변경되면 스냅샷 저장 |
| save 60 10000 | 60초 동안 10000개 이상 변경되면 스냅샷 저장 |
AOF의 appendfsync 옵션은 다음과 같습니다.
| 옵션 | 설명 | 특징 |
| always | 매 쓰기 명령마다 디스크에 동기화 | 데이터 안정성은 가장 높지만 성능 저하 가능성이 큼 |
| everysec | 1초마다 디스크에 동기화 | 성능과 안정성의 균형이 좋아 일반적으로 많이 사용 |
| no | OS가 디스크 동기화 시점을 결정 | 성능은 좋지만 장애 발생 시 데이터 유실 가능성이 큼 |
개발 실습에서는 appendonly yes 정도만 설정해도 충분합니다.
🔷 redis.conf를 Docker에 적용하는 방법
Docker에서 Redis 설정을 바꾸는 대표적인 방법은 세 가지입니다.
1. redis-server 실행 옵션으로 설정 전달
2. 호스트의 redis.conf 파일을 컨테이너에 마운트
3. docker-compose.yml에서 redis.conf를 마운트
✔️ 방법 1: docker run에서 설정 옵션 직접 전달
간단한 테스트라면 redis-server 실행 옵션으로 설정을 넘길 수 있습니다.
# 메모리 제한과 eviction policy 설정 예시
docker run -d \
--name redis \
-p 6379:6379 \
redis:8.6 \
redis-server \
--maxmemory 256mb \
--maxmemory-policy allkeys-lru
✔️ 방법 2: 호스트의 redis.conf를 Docker 컨테이너에 마운트
# 프로젝트 구조 예시
my-project/
├── docker-compose.yml
└── redis/
└── redis.conf
redis/redis.conf
bind 0.0.0.0
port 6379
requirepass mypassword
maxmemory 256mb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
dir /data
docker 실행
sudo docker run -d \
--name redis-conf \
-p 6379:6379 \
-v /mnt/d/NodejsDevelope/workspace/redis/redis.conf:/usr/local/etc/redis/redis.conf \
-v redis_data:/data \
redis:8.6 \
redis-server /usr/local/etc/redis/redis.conf
✔️ 방법 3: docker-compose.yml에서 redis.conf 마운트
# 프로젝트 구조
my-project/
├── docker-compose.yml
└── redis/
└── redis.conf
redis/redis.conf
bind 0.0.0.0
port 6379
requirepass mypassword
maxmemory 256mb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
dir /data
docker-compose.yml
services:
redis:
image: redis:8.6
container_name: local-redis
ports:
- "6379:6379"
volumes:
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
- redis_data:/data
command: redis-server /usr/local/etc/redis/redis.conf
restart: unless-stopped
volumes:
redis_data:
실행
# 실행
docker compose up -d
# 로그 확인
docker compose logs -f redis
# redis-cli 접속
docker exec -it local-redis redis-cli -a mypassword
# 테스트
PING

4. redis-cli와 기본 명령어 정리
🔷 redis-cli 접속 명령어
redis-cli는 Redis 서버에 명령어를 직접 입력할 수 있는 터미널 도구입니다.
| 명령어 | 설명 |
| redis-cli | 로컬 Redis에 기본 접속 |
| redis-cli -h 127.0.0.1 -p 6379 | 호스트와 포트를 지정해서 접속 |
| redis-cli -a mypassword | 비밀번호가 설정된 Redis에 접속 |
| AUTH mypassword | CLI 접속 후 비밀번호 인증 |
| docker exec -it local-redis redis-cli | Docker 컨테이너 내부에서 Redis CLI 실행 |
| docker compose exec redis redis-cli | Docker Compose 서비스 내부에서 Redis CLI 실행 |
| PING | Redis 서버 응답 확인 |
docker exec -it local-redis redis-cli
# 비밀번호가 있는 경우
docker exec -it local-redis redis-cli -a mypassword
🔷 서버 상태 확인 명령어
| 명령어 | 설명 |
| PING | Redis 서버와 정상 통신 가능한지 확인 |
| INFO | Redis 서버 전체 상태 정보 출력 |
| INFO server | Redis 버전, OS, 프로세스 정보 확인 |
| INFO memory | Redis 메모리 사용량 확인 |
| INFO clients | 현재 연결된 클라이언트 정보 확인 |
| INFO stats | 명령어 처리량, hit/miss 등 통계 확인 |
| INFO persistence | RDB, AOF 저장 상태 확인 |
| DBSIZE | 현재 DB에 저장된 key 개수 확인 |
| TIME | Redis 서버의 현재 시간 확인 |
| CLIENT LIST | 현재 Redis에 연결된 클라이언트 목록 확인 |
| CONFIG GET <pattern> | Redis 설정값 조회 |
127.0.0.1:6379> INFO memory
127.0.0.1:6379> DBSIZE
(integer) 0
127.0.0.1:6379> CONFIG GET maxmemory
🔷 Key 관리 명령어
Redis의 모든 데이터는 key를 기준으로 저장됩니다.
따라서 Redis를 사용할 때는 key 조회, 삭제, TTL 설정, 타입 확인 명령어에 익숙해야 합니다.
실무에서는 key 이름을 다음처럼 계층적으로 설계하는 경우가 많습니다.
# 일반적인 계층 구조 규칙
용도:도메인:식별자:속성
# 예시
cache:user:1
string:auth-code:kim@example.com
hash:user-profile:1
list:user:1:recent-posts
set:post-likes:100
zset:post-ranking
stream:orders
| 명령어 | 설명 |
| EXISTS key | key가 존재하는지 확인 |
| TYPE key | key에 저장된 데이터 타입 확인 |
| DEL key | key 삭제 |
| UNLINK key | key를 비동기 방식으로 삭제 |
| EXPIRE key seconds | key에 만료 시간 설정 |
| TTL key | key의 남은 만료 시간 확인 |
| PERSIST key | key의 만료 시간 제거 |
| RENAME oldKey newKey | key 이름 변경 |
| KEYS pattern | 패턴에 맞는 key 목록 조회 |
| SCAN cursor | key를 cursor 방식으로 점진적 조회 |
127.0.0.1:6379> SET user:1:name "Kim"
OK
127.0.0.1:6379> EXISTS user:1:name
(integer) 1
127.0.0.1:6379> GET user:1:name
"Kim"
127.0.0.1:6379> TYPE user:1:name
string
127.0.0.1:6379> EXPIRE user:1:name 60
(integer) 1
127.0.0.1:6379> TTL user:1:name
(integer) 52
127.0.0.1:6379> PERSIST user:1:name
(integer) 1
127.0.0.1:6379> TTL user:1:name
(integer) -1
127.0.0.1:6379> UNLINK user:1:name
(integer) 1
운영 환경에서는 KEYS * 명령어를 주의해야 합니다.
KEYS는 전체 key를 한 번에 조회하므로 key가 많은 Redis에서는 성능에 영향을 줄 수 있습니다.
운영 환경에서는 SCAN을 사용하는 것이 좋습니다.
127.0.0.1:6379> SCAN 0
🔷 String 기본 명령어
String은 Redis에서 가장 기본적인 자료구조입니다.
이름은 String이지만 단순 문자열뿐만 아니라 숫자, JSON 문자열, 토큰, 인증 코드, 카운터 값 등을 저장할 때 자주 사용합니다.
- 사용자 조회 결과 캐시
- 이메일 인증 코드
- Access Token 또는 Refresh Token
- 게시글 조회수 카운터
- 로그인 실패 횟수
- Rate Limiting
- 분산 락의 기본 구조
| 명령어 | 설명 |
| SET key value | 문자열 값 저장 |
| GET key | 문자열 값 조회 |
| SET key value EX seconds | 값을 저장하면서 TTL 설정 |
| SET key value NX | key가 없을 때만 저장 |
| SET key value XX | key가 이미 있을 때만 저장 |
| MSET key value key value | 여러 key-value를 한 번에 저장 |
| MGET key key | 여러 key 값을 한 번에 조회 |
| INCR key | 숫자 값을 1 증가 |
| DECR key | 숫자 값을 1 감소 |
| INCRBY key number | 숫자 값을 지정한 수만큼 증가 |
| DECRBY key number | 숫자 값을 지정한 수만큼 감소 |
127.0.0.1:6379> SET greeting "Hello Redis"
OK
127.0.0.1:6379> GET greeting
"Hello Redis"
127.0.0.1:6379> SET auth-code:kim@example.com "123456" EX 180
OK
127.0.0.1:6379> TTL auth-code:kim@example.com
(integer) 175
127.0.0.1:6379> INCR post:1:view-count
(integer) 1
127.0.0.1:6379> INCR post:1:view-count
(integer) 2
🔷 Hash 기본 명령어
Hash는 하나의 Redis key 안에 여러 field-value를 저장하는 자료구조입니다.
JavaScript 객체나 JSON 객체와 비슷하게 생각할 수 있습니다.
- 사용자 프로필
- 세션 정보
- 상품 재고 상태
- 사용자 설정
- 카운터가 포함된 객체 데이터
예를 들어 사용자 프로필은 다음과 같이 표현할 수 있습니다.
key: hash:user-profile:1
field: id value: 1
field: name value: Kim
field: email value: kim@example.com
field: status value: ACTIVE
| 명령어 | 설명 |
| HSET key field value | Hash에 field-value 저장 |
| HGET key field | 특정 field 값 조회 |
| HGETALL key | 모든 field-value 조회 |
| HMGET key field field | 여러 field 값 조회 |
| HDEL key field | 특정 field 삭제 |
| HEXISTS key field | 특정 field 존재 여부 확인 |
| HINCRBY key field number | 특정 field의 숫자 값 증가 |
| HKEYS key | field 목록 조회 |
| HVALS key | value 목록 조회 |
| HLEN key | field 개수 조회 |
127.0.0.1:6379> HSET hash:user-profile:1 id 1 name "Kim" email "kim@example.com" status "ACTIVE"
(integer) 4
127.0.0.1:6379> HGET hash:user-profile:1 name
"Kim"
127.0.0.1:6379> HGETALL hash:user-profile:1
1) "id"
2) "1"
3) "name"
4) "Kim"
5) "email"
6) "kim@example.com"
7) "status"
8) "ACTIVE"
🔷 List 기본 명령어
List는 순서가 있는 문자열 목록입니다.
Redis List는 왼쪽과 오른쪽 양쪽에서 데이터를 넣고 뺄 수 있습니다.
왼쪽 <---- List ----> 오른쪽
LPUSH RPUSH
LPOP RPOP
- 최근 본 게시글 목록
- 최근 검색어 목록
- 간단한 작업 큐
- 최근 로그 버퍼
중요한 작업 큐를 안정적으로 운영해야 한다면 단순 List보다 Redis Stream이나 BullMQ 같은 도구를 고려하는 것이 좋습니다.
| 명령어 | 설명 |
| LPUSH key value | 리스트 왼쪽에 값 추가 |
| RPUSH key value | 리스트 오른쪽에 값 추가 |
| LPOP key | 리스트 왼쪽 값을 꺼내고 제거 |
| RPOP key | 리스트 오른쪽 값을 꺼내고 제거 |
| LRANGE key start stop | 리스트의 지정 범위 조회 |
| LLEN key | 리스트 길이 조회 |
| LINDEX key index | 특정 인덱스 값 조회 |
| LTRIM key start stop | 지정 범위만 남기고 나머지 제거 |
| BLPOP key timeout | 값이 들어올 때까지 기다렸다가 왼쪽에서 꺼냄 |
| BRPOP key timeout | 값이 들어올 때까지 기다렸다가 오른쪽에서 꺼냄 |
127.0.0.1:6379> LPUSH list:user:1:recent-posts 101
(integer) 1
127.0.0.1:6379> LPUSH list:user:1:recent-posts 102
(integer) 2
127.0.0.1:6379> LPUSH list:user:1:recent-posts 103
(integer) 3
127.0.0.1:6379> LRANGE list:user:1:recent-posts 0 -1
1) "103"
2) "102"
3) "101"
127.0.0.1:6379> LTRIM list:user:1:recent-posts 0 9
OK
🔷 Set 기본 명령어
Set은 중복을 허용하지 않는 집합입니다.
같은 값을 여러 번 넣어도 한 번만 저장됩니다.
- 게시글 좋아요 사용자 목록
- 일일 방문자 중복 제거
- 온라인 사용자 관리
- 중복 요청 방지
- 사용자 관심 태그
- 권한 목록
| 명령어 | 설명 |
| SADD key member | Set에 member 추가 |
| SREM key member | Set에서 member 제거 |
| SMEMBERS key | Set의 모든 member 조회 |
| SISMEMBER key member | 특정 member 존재 여부 확인 |
| SCARD key | Set에 저장된 member 개수 조회 |
| SRANDMEMBER key count | 랜덤 member 조회 |
| SPOP key | 랜덤 member를 꺼내고 제거 |
| SINTER key key | 교집합 |
| SUNION key key | 합집합 |
| SDIFF key key | 차집합 |
| SSCAN key cursor | 큰 Set을 cursor 방식으로 조회 |
127.0.0.1:6379> SADD set:post-likes:100 1
(integer) 1
127.0.0.1:6379> SADD set:post-likes:100 2
(integer) 1
127.0.0.1:6379> SADD set:post-likes:100 1
(integer) 0
127.0.0.1:6379> SISMEMBER set:post-likes:100 1
(integer) 1
127.0.0.1:6379> SCARD set:post-likes:100
(integer) 2
🔷 Sorted Set 기본 명령어
Sorted Set은 Set에 score가 추가된 자료구조입니다.
member는 중복되지 않고, 각 member는 score를 가집니다.
Redis는 이 score를 기준으로 데이터를 정렬합니다.
- 인기 게시글 랭킹
- 검색어 순위
- 사용자 포인트 랭킹
- 게임 랭킹
- 우선순위 큐
| 명령어 | 설명 |
| ZADD key score member | Sorted Set에 score와 member 저장 |
| ZINCRBY key increment member | member의 score 증가 |
| ZRANGE key start stop | score가 낮은 순서로 조회 |
| ZREVRANGE key start stop | score가 높은 순서로 조회 |
| ZRANGE key start stop WITHSCORES | score와 함께 낮은 순서로 조회 |
| ZREVRANGE key start stop WITHSCORES | score와 함께 높은 순서로 조회 |
| ZRANK key member | 낮은 score 기준 순위 조회 |
| ZREVRANK key member | 높은 score 기준 순위 조회 |
| ZSCORE key member | 특정 member의 score 조회 |
| ZCARD key | member 개수 조회 |
| ZREM key member | 특정 member 제거 |
127.0.0.1:6379> ZADD zset:post-ranking 10 101
(integer) 1
127.0.0.1:6379> ZADD zset:post-ranking 20 102
(integer) 1
127.0.0.1:6379> ZINCRBY zset:post-ranking 5 101
"15"
127.0.0.1:6379> ZREVRANGE zset:post-ranking 0 2 WITHSCORES
1) "102"
2) "20"
3) "101"
4) "15"
🔷 Stream 기본 명령어
Redis Stream은 메시지를 저장할 수 있는 로그형 자료구조입니다.
Pub/Sub과 달리 메시지가 Redis에 남습니다.
또한 Consumer Group을 사용하면 여러 worker가 메시지를 나누어 처리할 수 있습니다.
Producer -> Stream -> Consumer Group -> Consumer
- 주문 이벤트 저장
- 알림 이벤트 큐
- 이메일 작업 큐
- 감사 로그
- 비동기 작업 처리
| 명령어 | 설명 |
| XADD key * field value | Stream에 메시지 추가 |
| XRANGE key start end | 오래된 순서로 메시지 조회 |
| XREVRANGE key end start | 최신 순서로 메시지 조회 |
| XLEN key | Stream 메시지 개수 조회 |
| XREAD STREAMS key id | Stream에서 메시지 읽기 |
| XGROUP CREATE key group id | Consumer Group 생성 |
| XREADGROUP GROUP group consumer STREAMS key id | Consumer Group 기준 메시지 읽기 |
| XACK key group id | 메시지 처리 완료 처리 |
| XPENDING key group | 읽었지만 ACK되지 않은 메시지 확인 |
| XDEL key id | 특정 메시지 삭제 |
127.0.0.1:6379> XADD stream:orders * orderId 1 userId 10 status CREATED
"1780000000000-0"
127.0.0.1:6379> XADD stream:orders * orderId 2 userId 11 status CREATED
"1780000001000-0"
127.0.0.1:6379> XRANGE stream:orders - +
1) 1) "1780000000000-0"
2) 1) "orderId"
2) "1"
3) "userId"
4) "10"
5) "status"
6) "CREATED"
2) 1) "1780000001000-0"
2) 1) "orderId"
2) "2"
3) "userId"
4) "11"
5) "status"
6) "CREATED"
🔷Pub/Sub 기본 명령어
Pub/Sub은 메시지를 발행하고 구독하는 기능입니다.
하나의 클라이언트가 특정 채널을 구독하고 있으면, 다른 클라이언트가 해당 채널로 메시지를 발행할 수 있습니다.
Publisher -> Redis Channel -> Subscriber
- 실시간 알림
- 캐시 무효화
- 채팅 브로드캐스트
- 관리자 공지
- 서버 간 간단한 이벤트 전달
Pub/Sub은 메시지를 저장하지 않습니다.
즉, 구독자가 없는 동안 발행된 메시지는 나중에 받을 수 없습니다.
메시지를 저장하고, 처리 상태를 관리하고, 실패한 메시지를 재처리해야 한다면 Pub/Sub보다 Redis Stream을 사용하는 것이 더 적합합니다.
| 명령어 | 설명 |
| SUBSCRIBE channel | 특정 채널 구독 |
| PSUBSCRIBE pattern | 패턴에 맞는 여러 채널 구독 |
| PUBLISH channel message | 특정 채널에 메시지 발행 |
| UNSUBSCRIBE channel | 채널 구독 해제 |
| PUNSUBSCRIBE pattern | 패턴 구독 해제 |
| PUBSUB CHANNELS | 현재 활성화된 Pub/Sub 채널 목록 조회 |
| PUBSUB NUMSUB channel | 특정 채널의 구독자 수 조회 |
# 첫 번째 터미널에서 구독합니다.
docker exec -it local-redis redis-cli
# 두 번째 터미널에서 메시지를 발행합니다.
docker exec -it local-redis redis-cli
127.0.0.1:6379> PUBLISH channel:notification "new notification"
(integer) 1
# 첫 번째 터미널에서는 다음과 같이 메시지를 받을 수 있습니다.
1) "message"
2) "channel:notification"
3) "new notification"
※ 게시된 글 및 이미지 중 일부는 AI 도구의 도움을 받아 생성되거나 다듬어졌습니다.
'1.시스템&인프라 > redis' 카테고리의 다른 글
| 6편. Redis Set 실습: 중복 제거와 상태 관리 (0) | 2026.07.08 |
|---|---|
| 5편. Redis List 실습: 최근 기록과 간단한 버퍼 처리 (0) | 2026.07.02 |
| 4편. Redis Hash 실습: 프로필, 세션, 재고, 사용자 설정 (0) | 2026.06.26 |
| 3편. Redis String 실습: 캐시, 인증 코드, 카운터, Rate Limiting (0) | 2026.06.23 |
| 2편. Redis 실습 프로젝트 구성하기: Prisma, SQLite, Redis, Vitest (0) | 2026.06.22 |