Danh sách bài viết

Bài 7: Redis Ecosystem Hôm Nay — Valkey, Redis Stack & Redis 8

Từ tháng 3 năm 2024, Redis không còn là phần mềm open-source theo nghĩa OSI công nhận: Redis Ltd đổi giấy phép từ BSD sang dual SSPLv1 và RSALv2. Phản ứng của cộng đồng cùng các cloud vendor lớn dẫn tới Valkey, một fork từ Redis 7.2.4 do Linux Foundation bảo trợ, giữ giấy phép BSD và là drop-in replacement tương thích protocol RESP. Bài này dựng lại timeline đó, phân biệt Redis OSS thuần với Redis Stack đóng gói các module Search, JSON, Bloom, TimeSeries, cập nhật bước ngoặt Redis 8 năm 2025 đưa module vào core và thêm AGPLv3, giới thiệu nhanh KeyDB và DragonflyDB, kèm bảng so sánh và code docker để bạn tự kiểm chứng. Mục tiêu: giúp engineer chọn đúng bản và tránh các hiểu lầm về license.

25/05/2026
12 phút đọc
0 lượt xem
1

Mục Tiêu Bài Học

  • Hiểu chính xác bối cảnh và timeline đổi license của Redis: tháng 3 năm 2024 chuyển từ BSD sang dual SSPLv1 / RSALv2, vì sao điều đó khiến Redis không còn được OSI công nhận là open-source.
  • Biết Valkey là gì: fork từ Redis 7.2.4, do Linux Foundation bảo trợ, giữ giấy phép BSD, tương thích protocol RESP nên là drop-in replacement.
  • Cập nhật bước ngoặt Redis 8 (2025): đưa các module chính vào core và bổ sung AGPLv3 như một lựa chọn open-source.
  • Phân biệt Redis OSS thuần với Redis Stack (Redis + Search, JSON, Bloom, TimeSeries) và biết khi nào cần Redis Stack.
  • Nắm nhanh các bản tương thích khác: KeyDB, DragonflyDB, cùng các managed service (AWS ElastiCache, Redis Cloud, GCP MemoryStore).
  • Chạy được Redis Stack và Valkey bằng docker, kiểm tra version bằng INFO server, và thấy code client gần như không đổi khi đổi từ Redis sang Valkey.
2

Tháng 3/2024 — Redis Đổi License

Trong gần 15 năm, phần lõi của Redis được phát hành dưới giấy phép BSD 3-Clause — một giấy phép permissive đúng nghĩa open-source: ai cũng được dùng, sửa, phân phối, kể cả trong sản phẩm thương mại đóng. Đó là một phần lý do Redis phổ biến tới mức gần như đồng nghĩa với "in-memory data store".

Ngày 20 tháng 3 năm 2024, Redis Ltd (công ty đứng sau Redis) tuyên bố từ phiên bản Redis 7.4 trở đi, mã nguồn lõi sẽ chuyển sang mô hình dual-license: SSPLv1 (Server Side Public License) hoặc RSALv2 (Redis Source Available License). Điểm cốt lõi cần nhớ:

  • SSPLv1RSALv2 đều không được OSI công nhận là giấy phép open-source. Vì vậy, về mặt định nghĩa chuẩn, Redis 7.4+ là source-available chứ không còn là open-source.
  • Mục tiêu công bố của Redis Ltd là chặn các nhà cung cấp cloud lớn bán Redis dưới dạng managed service mà không đóng góp ngược lại. SSPL yêu cầu nếu bạn cung cấp phần mềm "as a service" thì phải mở toàn bộ mã nguồn của hạ tầng vận hành dịch vụ đó.
  • Với đa số người dùng tự host bình thường, hai giấy phép này vẫn cho phép dùng và sửa. Nhưng với cloud vendor và một số mô hình kinh doanh, điều khoản trở nên không chấp nhận được.

Đây không phải lần đầu một công ty hạ tầng đi nước cờ này: MongoDB từng tạo ra chính SSPL (2018), Elastic đổi sang SSPL/Elastic License (2021). Mẫu hình lặp lại: đổi license source-available thường kéo theo một fork open-source do cộng đồng và đối thủ cloud dựng lên. Với Redis, fork đó là Valkey.

3

Valkey — Fork Do Linux Foundation Bảo Trợ

Chỉ vài ngày sau thông báo đổi license, Valkey ra đời (tháng 3 năm 2024). Đây là một fork từ Redis 7.2.4 — phiên bản BSD cuối cùng trước khi license đổi — và được đặt dưới sự bảo trợ của Linux Foundation. Một số người bảo trì cốt lõi (maintainer) của Redis trước đây cũng tham gia dự án này.

Những điểm quan trọng về Valkey:

  • Giấy phép BSD 3-Clause: Valkey giữ đúng giấy phép open-source mà Redis từng có, nên an toàn cho cả sản phẩm thương mại đóng và dịch vụ managed.
  • Bảo trợ trung lập: Linux Foundation đứng tên, với sự ủng hộ và đóng góp từ nhiều bên như AWS, Google, Oracle, Ericsson và cộng đồng. Mô hình quản trị nhiều bên (vendor-neutral) thay vì một công ty duy nhất sở hữu.
  • Drop-in replacement: Valkey tương thích protocol RESP, tập lệnh và định dạng dữ liệu giống Redis 7.2. Phần lớn trường hợp bạn chỉ cần đổi binary/Docker image, client code không phải sửa.
  • Valkey 8 bổ sung các cải tiến hiệu năng đáng chú ý, đặc biệt quanh xử lý I/O bất đồng bộ và tận dụng đa luồng (multi-threading) tốt hơn ở tầng network, cho throughput cao hơn trên CPU nhiều core. Phần thực thi lệnh trên keyspace vẫn giữ mô hình quen thuộc.

Hệ quả thực tế: với một engineer đang dùng Redis OSS 7.2 thuần (không dùng module thương mại), Valkey là lựa chọn open-source gần như không ma sát để tiếp tục nhận update mà không vướng SSPL/RSAL.

4

Redis 8 (2025) — Module Vào Core & Thêm AGPLv3

Câu chuyện không dừng ở chỗ "Redis rời open-source". Năm 2025, Redis Ltd phát hành Redis 8 với hai thay đổi lớn:

  • Đưa các module chính vào core: các tính năng vốn tách rời như RediSearch (full-text & vector search), RedisJSON (kiểu JSON gốc), RedisBloom (probabilistic: Bloom/Cuckoo filter, Count-Min Sketch, Top-K) và RedisTimeSeries (chuỗi thời gian) được tích hợp thẳng vào bản phân phối Redis, thay vì phải cài thêm như trước.
  • Bổ sung AGPLv3: Redis 8 thêm AGPLv3 — một giấy phép được OSI công nhận là open-source — như một lựa chọn bên cạnh SSPLv1 và RSALv2. Tức Redis quay lại có một nhánh open-source thực thụ, dù AGPL là copyleft mạnh (khác hẳn BSD permissive trước đây).

Lưu ý sự khác biệt về tinh thần giấy phép, vì nó ảnh hưởng trực tiếp tới cách bạn nhúng vào sản phẩm:

  • BSD (Valkey): permissive — gần như không ràng buộc, kể cả với sản phẩm đóng.
  • AGPLv3 (Redis 8): copyleft mạnh — nếu bạn sửa Redis và cung cấp nó "qua mạng" cho người dùng, bạn phải mở mã nguồn phần sửa đó. Nếu chỉ dùng Redis như một dịch vụ độc lập mà ứng dụng kết nối qua protocol RESP, nghĩa vụ AGPL thường không lan tới code ứng dụng của bạn — nhưng đây là điểm cần đội pháp lý xác nhận theo từng tình huống.
  • SSPLv1 / RSALv2: source-available — đặc biệt nhắm vào mô hình cung cấp managed service.

Kết quả là tới 2025, "thế giới Redis" tách thành hai nhánh sống song song: Redis (của Redis Ltd, tri-license AGPL/SSPL/RSAL) với module trong core, và Valkey (BSD, Linux Foundation). Cả hai vẫn nói chung protocol RESP.

5

Redis Stack vs Redis OSS — Khi Nào Cần Gì

Trước Redis 8, có một sự nhầm lẫn rất phổ biến: nhiều người tưởng FT.SEARCH, kiểu JSON hay Bloom filter là tính năng "có sẵn trong Redis". Thực ra chúng nằm trong các module, và bản đóng gói sẵn các module đó gọi là Redis Stack.

  • Redis OSS / Redis thuần: chỉ gồm core — các data structure cơ bản (String, Hash, List, Set, Sorted Set, Bitmap, HyperLogLog, Stream, GEO), pub/sub, scripting, replication, cluster. Đây là phần bạn đã học ở các bài trước.
  • Redis Stack: là Redis core cộng thêm các module — Search (RediSearch: full-text + vector), JSON (RedisJSON), Bloom (RedisBloom), TimeSeries (RedisTimeSeries) — đóng gói trong một bản phân phối/Docker image duy nhất, kèm cả Redis Insight (GUI) trong image dành cho dev.

Khi nào bạn cần Redis Stack (hoặc Redis 8 đã gộp module)? Khi bài toán vượt khỏi key-value/data-structure thuần:

  • Cần full-text search hoặc vector search (ví dụ semantic search cho ứng dụng AI/RAG) → cần module Search.
  • Lưu và truy vấn JSON document theo path, cập nhật field lồng nhau mà không serialize cả object → cần module JSON.
  • Đếm cardinality lớn, kiểm tra "đã thấy chưa" ở mức xấp xỉ, top-K phần tử phổ biến → cần module Bloom.
  • Lưu metrics theo thời gian, downsampling, aggregation theo cửa sổ → cần module TimeSeries.

Nếu bạn chỉ dùng Redis làm cache, session store, rate-limiter, distributed lock, queue đơn giản, thì Redis OSS hoặc Valkey thuần là đủ, không cần Redis Stack. Với Redis 8, vì module đã vào core nên ranh giới "Stack vs OSS" mờ đi đáng kể — nhưng nếu bạn đứng trên Valkey thì các module này không có sẵn (Valkey theo hướng giữ core thuần BSD).

6

KeyDB, DragonflyDB & Managed Services

Ngoài Redis và Valkey, hệ sinh thái "tương thích protocol Redis" còn vài cái tên đáng biết. Điểm chung: đều nói protocol RESP nên client Redis kết nối được, nhưng kiến trúc bên trong khác nhau.

  • KeyDB: một fork của Redis ra đời từ trước câu chuyện license (sau này được Snap mua lại). Khác biệt chính là multi-threaded — xử lý lệnh trên nhiều luồng thay vì mô hình single-thread của Redis cổ điển, nhằm tăng throughput trên máy nhiều core. Tương thích phần lớn lệnh Redis.
  • DragonflyDB: không phải fork mà là kiến trúc viết lại từ đầu, tương thích protocol Redis (và một phần Memcached). Dùng mô hình shared-nothing đa luồng để khai thác CPU nhiều core và bộ nhớ lớn trên một node, hướng tới throughput cao và vertical scaling. Vì là codebase độc lập, mức tương thích lệnh cần kiểm tra theo phiên bản.

Về managed services (bạn không tự vận hành, nhà cung cấp lo hạ tầng):

  • AWS ElastiCache: đã hỗ trợ Valkey (bên cạnh Redis OSS và Memcached). Đây là tín hiệu rõ ràng về sự dịch chuyển của cloud vendor sang nhánh BSD.
  • Redis Cloud: dịch vụ managed chính chủ của Redis Ltd, thường đi kèm đầy đủ module (Search, JSON, ...).
  • GCP MemoryStore: dịch vụ managed của Google, hỗ trợ các engine tương thích Redis.

Thông điệp cho engineer: vì tất cả cùng protocol RESP, bạn có nhiều lựa chọn hơn bao giờ hết. Tiêu chí chọn không chỉ là hiệu năng mà còn là license, mức độ tương thích lệnh bạn thực sự dùng, và việc bạn có cần module hay không.

7

Bảng So Sánh Toàn Cảnh

Bảng dưới tổng hợp các điểm khác biệt cốt lõi. Hãy đọc theo cột LicenseBảo trợ trước, vì đó là yếu tố hay bị bỏ qua nhất khi chọn.

Bản License Modules tích hợp Threading Bảo trợ / Chủ sở hữu
Redis OSS ≤ 7.2 BSD 3-Clause (open-source) Không (module cài riêng) Single-thread thực thi lệnh Redis Ltd
Redis 7.4 Dual SSPLv1 / RSALv2 (source-available) Không (module cài riêng) Single-thread thực thi lệnh Redis Ltd
Redis Stack Theo Redis (module dùng RSAL/SSPL) Search, JSON, Bloom, TimeSeries Single-thread thực thi lệnh Redis Ltd
Redis 8 (2025) Tri-license AGPLv3 / SSPLv1 / RSALv2 Có sẵn trong core (Search, JSON, Bloom, TimeSeries) Single-thread thực thi lệnh, I/O đa luồng Redis Ltd
Valkey 8 BSD 3-Clause (open-source) Không (giữ core thuần) I/O bất đồng bộ / đa luồng nâng cao Linux Foundation (AWS, Google, Oracle...)
KeyDB BSD 3-Clause (open-source) Không Multi-threaded Snap (sau khi mua lại)
DragonflyDB BSL 1.1 (source-available) Không (codebase riêng) Multi-threaded, shared-nothing DragonflyDB Inc

Lưu ý: chi tiết license có thể thay đổi theo từng phiên bản và module cụ thể; khi nhúng vào sản phẩm thương mại, luôn kiểm tra file LICENSE đúng version bạn dùng thay vì tin theo trí nhớ.

8

Thử Tay — Docker & Kiểm Tra Version

Cách nhanh nhất để cảm nhận sự khác biệt là chạy thử bằng Docker. Dưới đây là Redis OSS thuần, Redis Stack (kèm module + GUI) và Valkey.

# 1) Redis OSS thuần (chỉ core)
docker run -d --name redis-oss -p 6379:6379 redis:7.2

# 2) Redis Stack — core + Search/JSON/Bloom/TimeSeries + Redis Insight (8001)
#    image redis-stack có sẵn GUI cho dev
docker run -d --name redis-stack -p 6380:6379 -p 8001:8001 redis/redis-stack:latest

# 3) Valkey — drop-in replacement, giấy phép BSD
docker run -d --name valkey -p 6381:6379 valkey/valkey:8

Kiểm tra version và xác nhận server bạn đang nối tới là gì. Trường redis_version trong INFO server cho biết phiên bản; với Valkey còn có thêm trường valkey_version tuỳ build.

# Xem thông tin server của Redis OSS
redis-cli -p 6379 INFO server | grep -E "redis_version|os|multiplexing"

# Với Valkey, công cụ dòng lệnh là valkey-cli (tương đương redis-cli)
valkey-cli -p 6381 INFO server | grep -E "redis_version|valkey_version"

# redis-cli vẫn nối được Valkey vì cùng protocol RESP
redis-cli -p 6381 PING            # -> PONG
redis-cli -p 6381 INFO server | grep redis_version

Kiểm chứng module chỉ có ở Redis Stack / Redis 8, không có ở core thuần hay Valkey:

# Liệt kê module đang nạp
redis-cli -p 6380 MODULE LIST          # Redis Stack: thấy search, ReJSON, bf, timeseries...
redis-cli -p 6379 MODULE LIST          # Redis OSS thuần: rỗng
valkey-cli -p 6381 MODULE LIST         # Valkey: rỗng (không có module thương mại)

# Thử lệnh của module Search — chỉ chạy được khi có module
redis-cli -p 6380 FT._LIST             # OK trên Redis Stack
redis-cli -p 6379 FT._LIST             # ERR unknown command 'FT._LIST' trên core thuần
9

Code Client Không Đổi Giữa Redis & Valkey

Điểm quan trọng nhất với engineer: vì cùng protocol RESP, bạn dùng chính client Redis quen thuộc để nối tới Valkey, KeyDB hay DragonflyDB. Thường chỉ cần đổi host/port. Ví dụ với ioredis (TypeScript):

import Redis from "ioredis";

// Cùng một client ioredis, chỉ đổi port giữa Redis và Valkey
const redis = new Redis({ host: "127.0.0.1", port: 6379 }); // Redis OSS
const valkey = new Redis({ host: "127.0.0.1", port: 6381 }); // Valkey

async function demo(client: Redis) {
  await client.set("greeting", "xin chao", "EX", 60); // SET ... EX vẫn y hệt
  const value = await client.get("greeting");
  const info = await client.info("server");
  const versionLine = info.split("\n").find((l) => l.startsWith("redis_version"));
  console.log({ value, version: versionLine?.trim() });
}

await demo(redis);
await demo(valkey); // cùng code, chạy được trên cả hai

Tương tự với redis-py (Python) — cùng thư viện redis nối tới cả Redis lẫn Valkey:

import redis

# Cùng thư viện redis-py, chỉ khác port
r_redis = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)
r_valkey = redis.Redis(host="127.0.0.1", port=6381, decode_responses=True)

def demo(client: redis.Redis) -> None:
    client.set("greeting", "xin chao", ex=60)  # set ... ex y hệt
    value = client.get("greeting")
    info = client.info("server")
    print({"value": value, "version": info.get("redis_version")})

demo(r_redis)
demo(r_valkey)  # cùng code, chạy trên cả Redis và Valkey

Điều cần lưu ý: chỉ khi bạn dùng lệnh của module (ví dụ FT.SEARCH, JSON.SET) thì code mới phụ thuộc vào việc server có module đó hay không. Code dùng data structure core thì gần như di động hoàn toàn giữa các bản tương thích RESP.

10

Pitfalls & Anti-patterns

  • Tưởng Redis vẫn open-source BSD sau 2024. Từ Redis 7.4, lõi là SSPL/RSAL (source-available), không phải open-source theo OSI. Redis 8 (2025) mới thêm AGPLv3 — vẫn là copyleft mạnh, khác hẳn BSD permissive. Đừng giả định "Redis = BSD" như trước.
  • Dùng module Redis Stack mà không để ý license thương mại. Các module (Search, JSON, Bloom, TimeSeries) đi kèm điều khoản RSAL/SSPL/AGPL. Nếu bạn nhúng và phân phối/cung cấp dịch vụ, hãy để đội pháp lý rà điều khoản với đúng version đang dùng — đừng phát hiện sau khi đã ship.
  • Giả định mọi "managed Redis" đều là Redis Ltd. Nhiều dịch vụ thực ra chạy Valkey hoặc fork khác (ví dụ ElastiCache đã hỗ trợ Valkey). Tên dịch vụ có chữ "Redis" không có nghĩa là engine của Redis Ltd.
  • Coi Valkey là "Redis y hệt 100%" mãi mãi. Hiện tại tương thích cao vì cùng gốc 7.2, nhưng hai dự án đã tách và sẽ phân kỳ (diverge) dần. Tính năng mới của bên này chưa chắc có ở bên kia. Hãy kiểm tra lệnh bạn thực sự dùng theo từng version.
  • Chọn DragonflyDB/KeyDB chỉ vì "nhanh hơn" mà bỏ qua tương thích. Vì kiến trúc khác (nhất là DragonflyDB viết lại từ đầu), một số lệnh, hành vi cluster, script hay ngữ nghĩa cạnh tranh có thể khác. Benchmark trên đúng workload của bạn, đừng tin con số tổng quát.
  • Cài Redis Stack cho mọi thứ. Nếu chỉ cần cache/session/lock/queue, Redis OSS hoặc Valkey thuần là đủ và nhẹ hơn. Kéo theo cả bộ module chỉ làm nặng image, tăng bề mặt vận hành và vướng thêm ràng buộc license không cần thiết.
11

Tổng Kết & Quiz

Tổng kết

  • Tháng 3/2024: Redis Ltd đổi lõi Redis (từ 7.4) sang dual SSPLv1 / RSALv2 — source-available, không còn open-source theo OSI.
  • Valkey ra đời cùng thời điểm: fork từ Redis 7.2.4, do Linux Foundation bảo trợ, giữ BSD, là drop-in replacement nhờ cùng protocol RESP. Valkey 8 cải thiện I/O đa luồng.
  • Redis 8 (2025): đưa module (Search, JSON, Bloom, TimeSeries) vào core và thêm AGPLv3 — một lựa chọn open-source (copyleft mạnh) bên cạnh SSPL/RSAL.
  • Redis Stack = Redis core + các module, phân biệt với Redis OSS thuần. Chỉ cần Stack khi có nhu cầu search/JSON/probabilistic/timeseries.
  • KeyDB (fork multi-threaded) và DragonflyDB (kiến trúc viết lại) cùng tương thích RESP. Managed: ElastiCache đã có Valkey, Redis Cloud, GCP MemoryStore.
  • Với engineer: code client gần như không đổi giữa Redis và Valkey; điều cần cân nhắc nhất là license và việc có cần module hay không.

Quiz 5 câu

  1. Sau tháng 3/2024, Redis lõi (7.4) dùng giấy phép nào và vì sao nó không còn được coi là open-source theo OSI?
  2. Valkey fork từ phiên bản Redis nào, ai bảo trợ, và "drop-in replacement" ở đây nghĩa là gì?
  3. Redis 8 (2025) mang lại hai thay đổi lớn nào về module và license?
  4. Phân biệt Redis OSS thuần với Redis Stack. Nêu một tình huống bắt buộc phải dùng Redis Stack (hoặc Redis 8) thay vì Valkey thuần.
  5. Bạn đang dùng ioredis nối tới Redis 7.2 và muốn chuyển sang Valkey 8. Về mặt code client, bạn cần đổi những gì và vì sao thường rất ít?

Đáp án gợi ý

  1. Dual SSPLv1 / RSALv2 (source-available). Không được OSI công nhận open-source vì SSPL áp ràng buộc "nếu cung cấp as a service phải mở toàn bộ mã vận hành dịch vụ", còn RSAL là giấy phép source-available giới hạn dùng cho mục đích cạnh tranh — cả hai vi phạm các điều kiện trong định nghĩa open-source của OSI.
  2. Fork từ Redis 7.2.4 (bản BSD cuối). Bảo trợ bởi Linux Foundation (với AWS, Google, Oracle, Ericsson... đóng góp). "Drop-in replacement" nghĩa là tương thích protocol RESP, tập lệnh và dữ liệu giống Redis 7.2, nên phần lớn trường hợp chỉ cần đổi binary/Docker image mà không sửa client code.
  3. (1) Đưa các module chính (RediSearch, RedisJSON, RedisBloom, RedisTimeSeries) vào core; (2) bổ sung AGPLv3 như một lựa chọn open-source bên cạnh SSPLv1/RSALv2 (thành tri-license).
  4. Redis OSS thuần chỉ có core (data structure, pub/sub, scripting, replication, cluster). Redis Stack là core + module Search/JSON/Bloom/TimeSeries. Bắt buộc cần Stack/Redis 8 khi cần full-text hoặc vector search, truy vấn JSON theo path, probabilistic data structure, hoặc time-series — vì Valkey thuần không có các module này.
  5. Thường chỉ cần đổi host/port (và có thể credentials) trong cấu hình ioredis. Rất ít vì Valkey 8 cùng protocol RESP và tương thích lệnh với Redis 7.2; chỉ khi dùng lệnh của module mới phải bận tâm vì Valkey không có module đó.

Bài tiếp theo

Đã nắm toàn cảnh hệ sinh thái và biết cách chọn bản phù hợp, bài tiếp theo sẽ nhìn vào mặt còn lại: những trường hợp Redis không phải lựa chọn đúng — Bài 8: Khi Nào KHÔNG Nên Dùng Redis.

Tham khảo