Valkey란?
Valkey는 Redis 7.2.4에서 포크된 오픈소스 인메모리 데이터스토어다. 2024년 3월 Redis가 라이선스를 BSD에서 듀얼 라이선스(RSALv2 + SSPLv1)로 변경한 것에 대응하여, Linux Foundation 산하에서 BSD 라이선스를 유지하며 개발되고 있다.
Redis와 프로토콜 수준에서 완전 호환되므로, 기존 Redis 클라이언트 라이브러리와 도구를 그대로 사용할 수 있다.
Redis 포크 배경
| 시점 | 사건 |
|---|---|
| 2024-03 | Redis Labs가 Redis를 RSALv2 + SSPL 듀얼 라이선스로 변경 |
| 2024-03 | Linux Foundation이 Valkey 프로젝트 발표, Redis 7.2.4 기준 포크 |
| 2024-09 | Valkey 8.0 릴리스 — Redis와 독립적인 기능 추가 시작 |
주요 후원사: AWS, Google Cloud, Oracle, Ericsson, Snap 등
주요 사용 패턴
| 패턴 | 설명 |
|---|---|
| 캐시 | DB 쿼리 결과, API 응답, 세션 데이터를 인메모리에 캐싱하여 응답 속도 향상 |
| 메시지 브로커 | Celery 등 태스크 큐의 브로커로 사용. 작업 메시지를 Worker에 전달 |
| 세션 스토어 | 웹 애플리케이션의 사용자 세션을 중앙 관리 |
| Pub/Sub | 실시간 메시지 발행/구독. 채팅, 알림 등에 활용 |
| Rate Limiting | 토큰 버킷, 슬라이딩 윈도우 등 요청 제한 구현 |
| Leaderboard | Sorted Set을 활용한 실시간 순위표 |
데이터 구조
| 타입 | 설명 | 대표 명령 |
|---|---|---|
| String | 단순 키-값. 카운터, 캐시에 사용 | SET, GET, INCR |
| Hash | 필드-값 쌍의 집합. 객체 표현에 적합 | HSET, HGET, HGETALL |
| List | 순서가 있는 문자열 목록. 큐, 스택 | LPUSH, RPOP, LRANGE |
| Set | 중복 없는 문자열 집합. 태그, 유니크 방문자 | SADD, SMEMBERS, SINTER |
| Sorted Set | 스코어 기반 정렬 집합. 순위표, 타임라인 | ZADD, ZRANGE, ZRANK |
| Stream | 로그 형태의 append-only 구조. 이벤트 스트리밍 | XADD, XREAD, XRANGE |
영속성(Persistence)
인메모리 데이터를 디스크에 보존하는 두 가지 방식을 제공한다:
| 방식 | 설명 | 특징 |
|---|---|---|
| RDB | 주기적 스냅샷을 바이너리 파일로 저장 | 빠른 복구, 일부 데이터 유실 가능 |
| AOF | 모든 쓰기 명령을 로그로 기록 | 데이터 유실 최소화, 파일 크기 큼 |
프로덕션에서는 RDB + AOF를 병행하는 것이 일반적이다.
클러스터링
| 모드 | 설명 |
|---|---|
| Standalone | 단일 인스턴스. 개발/소규모 환경 |
| Sentinel | 자동 장애 감지 및 페일오버. HA 구성 |
| Cluster | 데이터를 16,384개 해시 슬롯으로 분산. 수평 확장 |
Redis와의 차이점
Valkey 8.0 이후 Redis와 독립적으로 진화하기 시작했다:
- 멀티스레드 I/O 개선
- 듀얼 채널 복제(replication) — 전체 동기화 중에도 변경분 전달 가능
- RDMA 네트워킹 지원 (실험적)
- 라이선스: BSD 3-Clause (Redis는 RSALv2 + SSPL)
클라이언트 호환성은 유지되므로 redis-cli, ioredis, jedis 등 기존 도구를 그대로 사용할 수 있다.
관련 문서
- Celery — Valkey를 메시지 브로커로 사용하는 비동기 태스크 큐