1.시스템&인프라/redis

1편. Redis 설치 및 기본 명령어 정리

쿼드큐브 2026. 6. 15. 11:04
반응형
반응형

 

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

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 도구의 도움을 받아 생성되거나 다듬어졌습니다.

반응형

 

반응형