본문으로 건너뛰기
김신건의 로그

[DB Internals] Redis 8 / Valkey 9: 라이센스 분기, 신 데이터 구조, 실전 운영

· 수정 · 📖 약 10분 · 3,277자/단어 #database #redis #valkey #cache #queue #vector-search #key-value #in-memory
Redis, Redis 8, Redis Stack, Valkey, Valkey 9, antirez, vector set, RediSearch, RedisJSON, RedisTimeSeries, Redlock, Sidekiq Redis, Sentinel, Redis Cluster, AOF, RDB, AGPLv3, SSPL, RSALv2

정의

Redisin-memory key-value 데이터 구조 서버. 2009년 Salvatore Sanfilippo (antirez)Lua Manuscripts 의 한 줄에서 시작해 서비스 인프라의 표준 부품 이 되었다.

2026-06 시점의 풍경은 2년 전과 완전히 다르다:

  • 라이센스 분기: 2024-03 의 BSD 종료 이후 Valkey 라는 Linux Foundation 산하 BSD fork 가 본격 자리잡았다.
  • antirez 복귀: 2024-11 에 antirez 가 Redis 사로 돌아오고, 2025-05 의 Redis 8 에서 AGPLv3 옵션 추가 + 새 데이터 구조 vector set 를 직접 만들어 발표.
  • Stack 통합: RediSearch, RedisJSON, RedisTimeSeries, Bloom, CMS, TopK 가 Redis 8 코어 로 들어왔다.
  • Vector DB 로서의 부상: LLM semantic cache, conversation memory, agent memory 의 de facto 저장소.

이 페이지는 2026-06 시점의 운영자/도입자 시점 에서 Redis / Valkey 양쪽의 동향과 실전 결정점 을 정리한다.

라이센스 분기 타임라인

시점이벤트
2009antirez 가 Redis 0.x 공개. BSD-3
2018-2019Redis Labs (이후 Redis Inc.) 가 모듈 (RediSearch, RedisJSON 등) 에 RSAL/Commons Clause 적용
2024-03-20Redis 7.4 부터 core 까지 RSALv2 + SSPLv1 dual. BSD 종료
2024-03-28Linux Foundation 이 Valkey fork 발표. Redis 7.2.4 기반 BSD-3. AWS / Google / Oracle / Snap / Ericsson 등 참여
2024-04-16Valkey 7.2.5 GA (BSD-3, 첫 안정 fork 릴리즈)
2024-09-16Valkey 8.0 GA
2024-11antirez 가 Redis 로 복귀 (developer evangelist). 커뮤니티 신호 큼
2025-04-02Valkey 8.1 (new hash table, 50M ZSet 처리)
2025-05-01Redis 8 + AGPLv3 옵션 추가. Redis Stack 코어 통합. vector set 첫 공개
2025-10-21Valkey 9.0 (atomic slot migration, hash field expiration, numbered databases)
2026-05-19Valkey 9.1 (보안 / 성능 / 관측성)

핵심 의미

  • RedisAGPLv3 (OSI 승인) / RSALv2 / SSPLv1triple license. 사용자는 AGPLv3 옵션 으로 진짜 OSS 로 쓸 수 있다.
  • ValkeyBSD-3. 라이센스 제약이 가장 가볍다. AWS / Google / Oracle 의 managed 서비스 가 대부분 Valkey 기반.
  • API 호환대체로 유지된다. 2026-06 시점 두 줄기 모두 RESP3 호환. 다만 신 데이터 구조 (vector set, Array, RediSearch SVS-VAMANA)각자 자기 동네에서 먼저 나온다.

도입 결정: managed 면 클라우드 벤더가 미는 Valkey 를 우선 검토. Stack 기능 (search, JSON, time-series)통째로 쓰려면 Redis 8. 직접 호스팅하면 AGPL 의 obligation 을 평가.

Redis 8 시리즈 (2025-05 ~ )

Redis 8.0 (2025-05)

  • Vector set 데이터 구조 (preview): antirez 가 직접 작성. HNSW 인덱싱 + 도메인 임베딩 친화 API.
  • Stack 통합: RediSearch, RedisJSON, RedisTimeSeries, RedisBloom, Cuckoo, Count-Min Sketch, TopKcore 안 으로. 더 이상 modules 묶음 을 별도 배포할 필요가 없다.
  • 새 hash 명령어: HGETEX, HSETEX, HGETDEL (세션 / 캐시 패턴에서 atomic + ttl).
  • 성능: 일부 명령어 최대 87% latency 단축, replica 메모리 35% 절감, 2x throughput.
  • 확장 ACL: 새 데이터 구조에 맞춘 권한 모델.

Redis 8.2

  • Streams: XDELEX / XACKDEL (라이프사이클 명령). consumer group 관리가 세분화.
  • BITOP 새 연산자 (복잡한 bitmap 워크플로).
  • RediSearch: SVS-VAMANA 벡터 인덱스 타입, SHARD_K_RATIO (KNN 샤드 후보 조절).
  • Keyspace notifications: 새 event type 으로 데이터 변경 추적 강화.

Redis 8.4

  • Strings: atomic compare-and-set.
  • Streams: idle entry claiming.
  • Search: hybrid search (벡터 + 텍스트 + 태그를 한 쿼리에서).
  • SIMD 최적화, JSON 처리 개선.

Redis 8.6 → 8.8

  • 새 데이터 구조 Array (antirez 직접). append-mostly + index access 워크로드 타겟.
  • INCREX: INCR + 윈도우 카운터 + bounds + expiration 통합 rate limiter. 한 줄로 토큰 버킷 비슷한 패턴 구현 가능.
  • XNACK: streams 에서 consumer 가 명시적으로 메시지를 release.
  • ZUNION / ZINTER / ZUNIONSTORE / ZINTERSTORE: 새 COUNT aggregator.
  • JSON.SET: 새 FPHA argument (homogeneous FP array).
  • TS.RANGE / TS.MRANGE: 한 명령에서 multiple aggregators.
  • FT.HYBRID: 새 KNN 절 옵션 + FT.PROFILE 지원.

Valkey 시리즈 (2024-04 ~ )

Valkey 7.2.5 (2024-04)

Redis 7.2.4 기반 첫 GA. BSD-3. 드롭인 호환.

Valkey 8.0 (2024-09)

  • 메모리 효율 개선 (압축 인코딩 튜닝).
  • 1M RPS 벤치마크 달성 (싱글 노드 + 클라이언트 fleet).
  • async I/O 모델.

Valkey 8.1 (2025-04)

  • hash table 디자인 (blog). 50M 멤버 ZSet 시나리오에서 메모리 / 처리량 동시 개선.
  • 성능 / 관측성 강화.

Valkey 9.0 (2025-10-21)

  • Atomic Slot Migration: 리샤딩이 원자적. 기존의 복잡한 PRE/MIGRATE/MIGRATING/STABLE 트랜잭션을 추상화 했다.
  • Hash Field Expiration: 키 전체가 아니라 해시 필드 하나마다 TTL. 세션 / 토큰 관리 패턴이 훨씬 간결.
  • Numbered Databases (재설계): cluster 모드에서도 namespacing 가능하도록 부활.
  • Vector Search 모듈 1.0 (별도 GA: 2025-07).
  • Bloom Filter / JSON / Searchvalkey-bundle 단일 컨테이너로 묶임.

Valkey 9.1 (2026-05-19)

  • 보안 강화 (TLS 운영 옵션, 기본값 정비).
  • 관측성 (COMMANDLOG, SLOT-STATS, per-thread I/O metrics).
  • 효율성, 클라이언트 라이브러리 호환성.

데이터 구조 카탈로그 (2026)

구조핵심 명령사용 케이스
StringSET, GET, INCR, APPEND캐시, 카운터, flag
ListLPUSH, RPOP, LRANGE, BLPOP큐, 큐 (FIFO), 최근 이벤트
HashHSET, HGET, HGETEX, HEXPIRE (필드 단위)객체, 세션, 사용자 프로필
SetSADD, SISMEMBER, SINTER태그, 멤버십, 중복 제거
Sorted Set (ZSet)ZADD, ZRANGEBYSCORE, ZRANGEBYLEX, ZUNION ... COUNT리더보드, 시간순 인덱스, 우선순위 큐
StreamXADD, XREAD, XREADGROUP, XACK, XACKDEL, XNACKappend-only log, 메시지 큐, event sourcing
HyperLogLogPFADD, PFCOUNT대규모 cardinality 추정 (UV 등)
GeoGEOADD, GEOSEARCH위치 인덱스, 반경 검색
BitmapSETBIT, BITCOUNT, BITOP일자별 활성 사용자, 권한 비트
BitfieldBITFIELD작은 정수 패킹 (memory micro-opt)
Vector Set (Redis 8)VADD, VSIM, VLINKS임베딩 검색, semantic cache, agent memory
Array (Redis 8.8)ARRPUSH, ARRGETappend-mostly index 패턴
Bloom / Cuckoo / CMS / TopKBF.ADD, BF.EXISTS확률적 자료구조
JSON (Redis 8 / Valkey JSON)JSON.SET, JSON.GET, JSON.ARRAPPEND문서 저장, partial update
Time SeriesTS.ADD, TS.RANGE, TS.MRANGE메트릭, IoT 텔레메트리

Stream vs Pub/Sub

항목Pub/SubStream
영속성없음 (구독자가 없으면 사라짐)영속 (TTL/MAXLEN 으로 관리)
Consumer group없음있음 (Kafka 와 유사)
ACK없음XACK, XACKDEL, XNACK
적합알림, 신호 (lossy OK)메시지 큐, event log

Pub/Sub 의 fan-out 신호 동작:

Stream / List 큐의 FIFO 동작:

자세한 비교는 Redis Pub Sub vs Streams 참고.

RediSearch / Valkey Search: 벡터 + 텍스트

LLM 시대의 Redis 의 두 번째 정체성. 벡터 인덱스 + 텍스트 + 태그 + 숫자를 한 쿼리 에서.

FT.CREATE idx ON HASH PREFIX 1 doc:
  SCHEMA
    title TEXT
    tag   TAG
    embedding VECTOR HNSW 6
      TYPE FLOAT32
      DIM 1536
      DISTANCE_METRIC COSINE

FT.SEARCH idx "@tag:{backend} =>[KNN 10 @embedding $vec AS score]"
  PARAMS 2 vec <bytes> DIALECT 2
알고리즘특징
FLAT정확한 brute-force, 작은 데이터셋
HNSWApproximate Nearest Neighbor 표준. 빠름, 메모리 큼
SVS-VAMANA (Redis 8.2+)대규모 + 메모리 효율. Intel/Microsoft 가 밀고 있는 알고리즘

Hybrid search (FT.HYBRID) 는 키워드 + 벡터 점수를 합쳐 RRF (Reciprocal Rank Fusion) 로 섞는다. RAG 시스템에서 키워드 매치 + 의미 검색 을 한 호출로.

실전 운영 패턴

1. 캐시 (가장 흔한 시작)

캐시 HIT (~6ms) 와 MISS (~72ms) 의 직관:

  • TTL 정책: 짧고 자주 가 안전. 데이터 모양 / 인기 분포에 따라 layered TTL (자주 쓰이는 키는 길게, 나머지 짧게).
  • Cache stampede: TTL 만료 시 동시에 많은 클라이언트 가 백엔드를 친다. probabilistic early refresh, single-flight lock, stale-while-revalidate 패턴으로 완화.
  • Cache aside vs Read-through vs Write-behind: Rails 의 Rails.cache.fetchcache aside. write-through 는 트랜잭션 보장이 필요.

자세한 패턴 카탈로그는 Redis Cache Patterns 참고.

2. 분산 락

SET key value NX PX <ms> + Lua 로 compare-and-delete. Redis 의 Redlock 알고리즘.

Martin Kleppmann 의 비판 과 antirez 의 반박 이 유명. 정확한 mutual exclusion 을 보장해야 하는 영역 (예: 결제) 에는 Redlock 만으로 충분하지 않다. fencing token 이 추가로 필요.

idempotent + retry-safe 한 작업에는 Redlock 단순 패턴이 충분히 실용적.

3. 큐 (Sidekiq / BullMQ / RQ)

producer / consumer 의 blocking queue 동작:

라이브러리언어큐 구현
SidekiqRubyList + Sorted Set (scheduled) + Hash (job hash)
BullMQNodeStream + Sorted Set, 강력한 priority
RQPythonList 기반 단순
ResqueRubyList 기반 (Sidekiq 의 선조)
Celery (Redis broker)PythonList + ZSet

Sidekiq Pro/Enterprisereliable fetch (RPOPLPUSH 패턴) 으로 crash 시 작업 손실 을 막는다. Stream + consumer group 으로 다시 짤 수 있는 영역이지만 호환성 으로 List 가 유지.

4. Vector store / Semantic cache (LLM 시대)

패턴구현
Semantic cache질문 embedding 으로 KNN search → 임계값 이상이면 캐시 히트. LLM 호출 비용 절감
Conversation memoryXADD 로 turn 을 append + VADD 로 embedding 저장. 검색 시 최근 N turn + 의미 유사 M turn 혼합
Agent memory (Mem0 식)세션 단위 short-term + 장기 long-term 분리. Valkey + Mem0 사례 (blog)
RAG retrievalFT.HYBRID키워드 + 벡터 결합

5. Rate Limiting

  • Token bucket: ZSet timestamp 또는 Lua script 로 atomic.
  • Sliding window: 마찬가지로 Lua 또는 INCREX (Redis 8.8) 단일 명령.
  • Fixed window: INCR + EXPIRE NX.

운영 결정점

Persistence: RDB vs AOF

옵션동작트레이드오프
RDB주기적 snapshot빠름, 분 단위 손실
AOF모든 write 를 append-only file손실 최소, 느림 + 큰 파일
RDB + AOF둘 다부팅 빠르고 손실 적음. 권장
appendfsync everysec1초 1회 fsync손실 ≤ 1초, 거의 표준
appendfsync always매 write fsync손실 0, throughput 큰 영향

캐시 전용이면 둘 다 끄고 도 OK. primary data storeAOF + RDB hybrid + replica.

Cluster vs Sentinel vs Standalone

모드핵심
Standalone단일 노드 + replica 옵션. 작은 워크로드
Sentinel자동 failover, 키 분할 없음. 데이터셋이 한 노드 메모리 안
Cluster16384 슬롯 분할. 수평 확장. 멀티 키 명령 제약 ({hashtag})

Valkey 9.0 의 atomic slot migration 으로 Cluster 운영의 가장 무서운 부분 이 크게 완화. 2026 시점 Cluster 진입 장벽 이 낮아졌다.

메모리 / Eviction

LRU 의 동작 직관:

maxmemory <bytes> + maxmemory-policy:

Policy설명
noeviction (기본)메모리 초과 시 write 에러
allkeys-lru모든 키 중 LRU (캐시 전용)
volatile-lruTTL 있는 키 중 LRU
allkeys-lfuLFU (자주 쓰이는 키 우선 유지)
allkeys-random랜덤

memory fragmentation 모니터링: INFO memorymem_fragmentation_ratio (이상적 1.0 ~ 1.5). 1.5 초과면 jemalloc 의 fragmentation. MEMORY PURGE 또는 restart.

Pipeline vs Lua vs Function

도구의미
Pipeline여러 명령을 한 번에 보내고 응답을 모음. atomic 아님. RTT 절약
MULTI / EXECatomic batch. WATCH 로 optimistic
EVAL (Lua)atomic 스크립트. SCRIPT LOAD 로 캐시
FUNCTION (Redis 7+)Lua 함수를 서버에 등록. 명명 + 버전 관리 가능. Lua 보다 권장

대안

대안라이센스특징
ValkeyBSD-3Redis 7.2 fork. Linux Foundation. AWS / Google managed
DragonflyDBBSL 1.1멀티스레드 재구현. Redis API 호환. 25x throughput claim
KeyDBBSD-3 (Snap 인수)Redis fork + 멀티스레드. 최근 활동 줄어듦
MemcachedBSD-3순수 캐시. 데이터 구조 / 영속성 없음. 멀티스레드
GarnetMIT (Microsoft)RESP 호환 .NET 구현. cluster 미흡
EtcdApache 2.0강한 일관성 (Raft). KV + watch. 캐시 아닌 coordination

선택 기준:

  • managed 가격 + 호환성 → Valkey (대형 클라우드 추천)
  • throughput + 멀티코어 풀활용 → DragonflyDB
  • Stack 기능 (vector / search / JSON) 전부 + AGPL 가능 → Redis 8
  • 순수 캐시 + 단순함 → Memcached

김신건의 현장 메모 (hera-webapp 운영)

  • Sidekiq + Redis 4년 운영. 가장 자주 본 알람은 Sidekiq 큐 적체Redis 메모리 사용량. INFO memoryINFO clients대시보드 핵심 지표 로.
  • enqueue 폭발 은 보통 큐별 분리concurrency 분리 로 해결. critical / default / mailers / low 등 우선순위 큐를 정의하고 워커 풀을 큐별로 분리.
  • 대량 job + Redis 메모리 압박 시: job payload 를 Redis 에 넣지 말고 DB id 만 (또는 S3 reference). Sidekiq 의 default 가 전체 args 직렬화 라 의외로 함정.
  • Sentinel 운영 시 failover 동안 short-lived 클라이언트 timeout 이 가장 흔한 사고. application level retryconnection poolfailover 동작 명세 가 같이 가야 한다.
  • RediSearch / vector 는 hera-webapp 시기에는 별 필요 없었지만 역량 리포트 같은 세션/대화 기반 흐름에서는 Redis 8 vector set + semantic cache프롬프트 비용주 단위 그래프 로 끌어내릴 수 있는 가장 빠른 손.
  • AGPL 의무: SaaS 노출AGPL 의 source 공개 의무 가 켜진다. 도입 전 법무 / 컴플라이언스 와 확인. Valkey 가 BSD 라는 점이 managed 환경 에서 거의 결정 요인.

관련 위키

운영 / 아키텍처 개념:

자료구조별:

인접 위키:

참고

이 글의 용어 (16개)
[DB Internals] MVCC: Multi-Version Concurrency Controldatabase-internals
정의 MVCC (Multi-Versioning Concurrency Control) 는 트랜잭션 간 격리를 여러 버전의 row 로 구현. 동시 read / write 가 락 없이…
[DevOps] 무중단 배포: Blue-Green, Canary, Rolling, Expand-Contractdevops
정의 무중단 배포 (Zero-Downtime Deployment) 는 서비스 가동을 멈추지 않고 새 버전을 배포하는 일련의 전략. 핵심 도전 4가지: 1. 트래픽 전환: 어떻게 …
[Rails] Active Job: 백그라운드 워커rails
정의 Active Job은 백엔드(Sidekiq, Resque, Solid Queue 등) 추상화 계층. 같은 코드로 다른 queue adapter 교체 가능. Rails 8부터…
[Redis] Bloom / Cuckoo / CMS / TopK: 확률 자료구조database-internals
정의 확률 자료구조 (Probabilistic Data Structures) 는 작은 메모리 로 대규모 데이터의 통계적 답 을 제어된 오차 로 내는 자료구조군. Redis 는 B…
[Redis] Cache Patterns: Cache-Aside, Stampede, Evictiondatabase-internals
정의 Cache Pattern 은 Redis (또는 다른 캐시) 를 어떤 경로로 읽고 쓰는지 의 디자인 결정. 같은 인프라로도 패턴 선택에 따라 일관성 / 지연 / 부하 가 완전…
[Redis] Distributed Lock: SET NX, Redlock, Fencing Tokendatabase-internals
정의 분산 락 (Distributed Lock) 은 여러 프로세스 / 머신 에서 한 시점에 하나만 임계 영역에 진입하도록 보장하는 동기화 도구. Redis 는 간단한 SETNX …
[Redis] Hash: 객체 저장, Field TTL (7.4+), Listpack vs Hashtabledatabase-internals
정의 Redis Hash 는 키 안의 작은 dict. 하나의 키 ( ) 가 여러 field → value 쌍을 가진다. 부분 갱신 / 부분 조회 가 atomic + 효율적. = …
[Redis] HyperLogLog & Geo: 확률 카운팅 + 공간 인덱스database-internals
정의 이 페이지는 작지만 강력한 두 자료구조 를 묶는다. - HyperLogLog (HLL): 대규모 unique count 를 0.81% 오차로 12 KB 안에 추정. - Ge…
[Redis] List: Quicklist / Listpack, BLPOP, Sidekiq 큐database-internals
정의 Redis List 는 양끝 push / pop 이 O(1) 인 순서 보존 시퀀스. 큐 (FIFO), 스택 (LIFO), 최근 N개 목록, Sidekiq 같은 큐 시스템 의…
[Redis] Persistence: RDB / AOF / Hybriddatabase-internals
정의 Redis Persistence 는 in-memory 데이터를 디스크 로 지속화하는 메커니즘. 세 가지 옵션: 1. RDB (Redis Database file): 주기적 …
[Redis] Pub/Sub vs Streams: 휘발 신호 vs 영속 로그database-internals
정의 - Pub/Sub ( / ): 지금 듣고 있는 구독자 에게만 메시지가 전달되는 휘발성 신호. 영속 없음, ACK 없음. fan-out. - Streams ( / / / ):…
[Redis] Replication & Sentinel: 비동기 복제와 자동 Failoverdatabase-internals
정의 Redis Replication 은 primary (master) → replica (slave) 방향의 비동기 단방향 복제. 읽기 부하 분산 과 고가용성 의 토대. Red…
[Redis] Set: 중복 없는 멤버십, SINTER / SUNION / SDIFFdatabase-internals
정의 Redis Set 은 중복 없는 unordered 멤버 집합. SADD / SREM / SISMEMBER 가 O(1), SINTER / SUNION / SDIFF 의 집합 …
[Redis] Sorted Set: Skiplist + Dict, 리더보드, 우선순위 큐database-internals
정의 Redis Sorted Set (ZSet) 은 멤버 + 점수 (score) 의 순서 보존 unique 집합. score 기준 정렬 + 멤버 기준 O(1) 조회 가 동시에 가…
[Redis] String / Bitmap / Bitfield: 가장 기본 + 가장 강력database-internals
정의 Redis String 은 binary-safe 한 바이트 열. 최대 512 MB. 문자열만이 아니라 정수, 부동소수, 직렬화된 객체, 비트맵 (Bitmap), 패킹된 정수…
[Redis] Vector Search: HNSW, SVS-VAMANA, Semantic Cachedatabase-internals
정의 Vector Search 는 임베딩 벡터의 거리/유사도 기준으로 근접한 K 개 를 찾는 검색. Redis 는 RediSearch 모듈 (Redis 8 부터는 코어) 과 Va…

이 개념을 사용하는 글 (1)

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기