Valkey so với Redis cho Laravel: Caching và Queues - Những điều bạn cần biết

05 tháng 4, 2026·14 phút đọc

Sau khi Redis thay đổi giấy phép sang các hạn chế mới, dự án Valkey đã nổi lên như một sự thay thế mã nguồn mở đáng tin cậy. Bài viết này sẽ phân tích chi tiết về khả năng tương thích hoàn toàn của Valkey với Laravel, so sánh hiệu năng và hướng dẫn di chuyển dữ liệu, giải thích lý do tại sao Deploynix lại chọn Valkey làm mặc định.

Valkey so với Redis cho Laravel: Caching và Queues - Những điều bạn cần biết

Vào tháng 3 năm 2024, dự án Redis đã gây chấn động cộng đồng công nghệ khi thay đổi giấy phép từBSD 3-Clause thân thiện sang giấy phép kép bao gồmRedis Source Available License (RSALv2) và Server Side Public License (SSPLv1). Điều này có nghĩa là các nhà cung cấp dịch vụ đám mây và nền tảng lưu trữ không còn được tự do cung cấp Redis dưới dạng dịch vụ được quản lý (managed service) mà không có thỏa thuận thương mại với Redis Ltd.

Phản ứng diễn ra gần như ngay lập tức. Linux Foundation đã tạo ra một bản fork (phân nhánh) từ Redis 7.2.4 dưới giấy phép BSD 3-Clause và đặt tên cho dự án này là Valkey. Chỉ trong vài tháng, các gã khổng lồ như AWS, Google Cloud, Oracle, Ericsson và hàng chục tổ chức khác đã tham gia đóng góp. Đến giữa năm 2025, Valkey đã khẳng định mình là sự kế thừa mã nguồn mở chính của mã nền tảng Redis, với sự phát triển năng nổ và bộ tính năng ngày càng mở rộng.

Đối với các nhà phát triển Laravel, điều này dấy lên nhiều câu hỏi thực tế. Liệu Valkey có tương thích với các driver hiện có của Redis không? Bạn có cần thay đổi mã nguồn ứng dụng không? Hiệu năng ra sao? Hướng dẫn này sẽ trả lời tất cả các câu hỏi đó và giải thích lý do tại sao Deploynix lại cung cấp Valkey theo mặc định trên tất cả các máy chủ mới.

Valkey chính xác là gì?

Valkey là một bản fork của Redis 7.2.4, phiên bản cuối cùng được phát hành dưới giấy phép BSD. Nó là một kho lưu trữ cấu trúc dữ liệu trong bộ nhớ (in-memory data structure store) hoạt động gần như giống hệt Redis đối với phần lớn các trường hợp sử dụng: caching, lưu trữ phiên làm việc (session), quản lý hàng đợi (queue), pub/sub thời gian thực và giới hạn tốc độ (rate limiting).

Tên gọi "Valkey" là sự kết hợp của "value" và "key", một cái tên mang tính mô tả cao độ cho một kho lưu trữ dạng khóa-giá trị.

Những gì Valkey không phải

Valkey không phải là một sản phẩm mới được xây dựng từ con số không. Nó là sự tiếp nối trực tiếp của mã nền tảng Redis với cùng các cấu trúc dữ liệu, cùng giao thức (RESP), cùng tập lệnh lệnh và các cơ chế lưu trữ (persistence) giống hệt nhau. Nếu bạn biết Redis, bạn biết Valkey. Nếu ứng dụng của bạn hoạt động với Redis 7.2, nó sẽ hoạt động với Valkey.

Valkey cũng không phải là phần mềm bị bỏ rơi. Nó có cơ sở đóng góp viên đang hoạt động lớn hơn cả Redis trước khi thay đổi giấy phép, được hậu thuẫn bởi các nhà cung cấp dịch vụ đám mây lớn, những người có lợi ích trực tiếp trong sự phát triển liên tục của nó.

Khả năng tương thích với Laravel

Đây là câu hỏi đầu tiên mà mọi nhà phát triển Laravel đặt ra, và câu trả lời rất đơn giản: Valkey hoàn toàn tương thích với tích hợp Redis của Laravel.

Tương thích Driver

Laravel giao tiếp với Redis (và Valkey) thông qua hai phần mở rộng PHP: PhpRedis và Predis. Cả hai đều sử dụng giao thức RESP, mà Valkey triển khai giống hệt Redis. Không cần thay đổi cấu hình Laravel của bạn.

Cấu hình config/database.php cho Redis của bạn giữ nguyên như sau:

'redis' => [
    'client' => env('REDIS_CLIENT', 'phpredis'),
    'default' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_DB', '0'),
    ],
    'cache' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_CACHE_DB', '1'),
    ],
],

Hãy lưu ý rằng cấu hình vẫn ghi là "redis" — và điều đó là đúng. Valkey tương thích về giao thức, vì vậy driver Redis của Laravel hoạt động mà không cần thay đổi tên driver, khóa cấu hình hay biến môi trường.

Cache Driver

Sử dụng Valkey làm cache driver cho Laravel yêu cầu thay đổi mã bằng số không:

CACHE_STORE=redis
REDIS_HOST=127.0.0.1

Tất cả các thao tác cache — Cache::get(), Cache::put(), Cache::remember(), Cache::tags(), Cache::forget() — đều hoạt động giống hệt nhau.

Queue Driver

Valkey hoạt động chính xác như Redis khi đóng vai trò là backend cho hàng đợi:

QUEUE_CONNECTION=redis

Việc điều phối công việc (job dispatching), công việc trì hoãn, phân lô công việc, giới hạn tốc độ và tất cả các tính năng hàng đợi của Laravel đều hoạt động mà không cần sửa đổi.

Session Driver

Các phiên làm việc được lưu trữ trong Valkey:

SESSION_DRIVER=redis

Không cần thay đổi mã. Việc tạo phiên, đọc, thu gom rác (garbage collection) và vô hiệu hóa đều hoạt động theo cùng một cách.

Broadcasting với Reverb

Laravel Reverb sử dụng Redis (Valkey) để phân phối tin nhắn pub/sub trong thiết lập nhiều máy chủ. Việc triển khai pub/sub của Valkey giống hệt Redis, vì vậy Reverb hoạt động mà không cần thay đổi cấu hình nào.

Horizon

Laravel Horizon, bảng điều khiển giám sát hàng đợi, hoạt động với Valkey ngay lập tức (out of the box). Horizon sử dụng cùng các lệnh Redis để kiểm tra hàng đợi, thu thập chỉ số và quản lý worker.

So sánh hiệu năng

Các bài kiểm tra chuẩn (Benchmarks)

Valkey 7.2 có hiệu năng giống hệt Redis 7.2 vì đó chính là cùng một mã nguồn. Bất kỳ sự khác biệt nào về hiệu năng ở phiên bản này đều nằm trong biên độ sai số của phép đo.

Điều thú vị lại nằm ở các bản phát hành Valkey mới hơn. Đội ngũ phát triển Valkey đã tích cực làm việc để cải thiện hiệu năng:

Cải tiến trong Valkey 8.0:

  • Xử lý I/O đa luồng để tận dụng tốt hơn các máy chủ đa nhân hiện đại.
  • Cải thiện hiệu suất bộ nhớ cho một số cấu trúc dữ liệu nhất định.
  • Tối ưu hóa hiệu suất sao chép (replication).

Trong các bài kiểm tra độc lập, Valkey 8.0 cho thấy thông lượng cao hơn 10-20% so với Redis 7.2 cho các khối lượng công việc được hưởng lợi từ I/O đa luồng, đặc biệt là trên các máy chủ có 4 lõi CPU trở lên. Đối với khối lượng công việc Laravel điển hình (đọc/ghi cache, thao tác queue), sự khác biệt thực tế là tối thiểu vì các thao tác này vốn dĩ đã cực kỳ nhanh (dưới mili-giây).

Khi nào hiệu năng thực sự quan trọng

Đối với hầu hết các ứng dụng Laravel, hiệu năng của kho lưu trữ khóa-giá trị không phải là điểm nghẽn. Một lần đọc cache từ Valkey mất 0,1-0,3ms cục bộ và 0,5-1ms qua mạng. Các truy vấn cơ sở dữ liệu, xử lý PHP và lệnh gọi API bên ngoài mất thời gian dài hơn nhiều bậc.

Sự khác biệt về hiệu năng giữa Valkey và Redis trở nên phù hợp khi:

  • Bạn đang xử lý hàng triệu thao tác cache mỗi phút.
  • Hệ thống pub/sub của bạn xử lý hàng nghìn tin nhắn mỗi giây.
  • Bạn đang sử dụng các cấu trúc dữ liệu phức tạp (sorted sets, streams) với khối lượng lớn.

Đối với những khối lượng công việc này, các cải tiến đa luồng của Valkey 8.0 mang lại lợi ích đo lường được.

Sử dụng bộ nhớ

Việc sử dụng bộ nhớ là giống hệt nhau cho cùng một bộ dữ liệu. Valkey sử dụng cùng chiến lược mã hóa và nén dữ liệu như Redis 7.2. Một bộ dữ liệu sử dụng 2GB trên Redis sẽ sử dụng 2GB trên Valkey.

Di chuyển từ Redis sang Valkey

Nếu bạn đang cung cấp máy chủ mới

Nếu bạn đang thiết lập hạ tầng mới thông qua Deploynix, không có gì để di chuyển cả. Deploynix cung cấp Valkey theo mặc định và ứng dụng Laravel của bạn kết nối với nó bằng cùng driver và cấu hình Redis. Bạn chỉ cần triển khai ứng dụng, đặt biến môi trường REDIS_HOST và mọi thứ sẽ hoạt động.

Nếu bạn đang di chuyển máy chủ hiện có

Việc di chuyển từ Redis sang Valkey trên máy chủ hiện có bao gồm việc thay thế tệp nhị phân Redis bằng tệp nhị phân Valkey. Định dạng dữ liệu tương thích, vì vậy dữ liệu hiện có của bạn được bảo toàn.

Các bước di chuyển:

  1. Sao lưu dữ liệu Redis của bạn. Chạy lệnh BGSAVE để tạo bản chụp RDB.

  2. Dừng Redis.

    sudo systemctl stop redis
    
  3. Cài đặt Valkey. Việc cài đặt khác nhau tùy theo hệ điều hành. Trên Ubuntu:

    sudo apt-get install valkey-server
    
  4. Sao chép cấu hình Redis của bạn. Định dạng tệp cấu hình của Valkey tương thích với Redis. Sao chép redis.conf của bạn thành valkey.conf và cập nhật các đường dẫn liên quan.

  5. Sao chép tệp RDB. Di chuyển tệp dump Redis của bạn đến thư mục dữ liệu của Valkey.

  6. Khởi động Valkey.

    sudo systemctl start valkey
    
  7. Xác minh. Kết nối bằng valkey-cli (hoặc redis-cli — cả hai đều hoạt động) và xác minh dữ liệu của bạn có ở đó.

  8. Cập nhật giám sát. Nếu bạn có hệ thống giám sát theo dõi quy trình Redis cụ thể, hãy cập nhật nó để theo dõi Valkey thay thế.

Quan trọng: Ứng dụng Laravel của bạn yêu cầu thay đổi bằng số không. Các biến môi trường REDIS_HOST, REDIS_PORTREDIS_PASSWORD giữ nguyên (giả sử bạn sử dụng cùng máy chủ, cổng và mật khẩu). Cấu hình driver vẫn là redis. Không có gì trong cơ sở mã của bạn thay đổi.

Trên các máy chủ được quản lý bởi Deploynix

Đối với các máy chủ được quản lý bởi Deploynix, nền tảng sẽ xử lý cài đặt và cấu hình Valkey trong quá trình cung cấp. Nếu bạn có các máy chủ hiện đang chạy Redis và muốn di chuyển, quy trình giống như trên — hoặc bạn có thể cung cấp một máy chủ Cache mới với Valkey và trỏ ứng dụng của bạn tới đó.

Tại sao Deploynix chọn Valkey

Quyết định đặt mặc định là Valkey được thúc đẩy bởi ba yếu tố:

1. Sự rõ ràng về giấy phép

Giấy phép BSD 3-Clause của Valkey rất rõ ràng. Không có hạn chế về cách nó có thể được sử dụng, triển khai hay cung cấp như một phần của dịch vụ. Điều này rất quan trọng đối với Deploynix vì nền tảng này cung cấp và quản lý các máy chủ Valkey cho khách hàng — một trường hợp sử dụng có thể gặp vấn đề dưới giấy phép mới của Redis.

Đối với ứng dụng của bạn, giấy phép có vẻ không liên quan. Nhưng việc sử dụng phần mềm có giấy phép rõ ràng và cho phép rộng rãi có nghĩa là bạn không bao giờ phải lo lắng về việc tuân thủ giấy phép khi doanh nghiệp của bạn phát triển hoặc trường hợp sử dụng của bạn thay đổi.

2. Động lực của cộng đồng

Dự án Valkey đã thu hút hoạt động đóng góp đáng kể từ các công ty công nghệ lớn. AWS, Google Cloud, Oracle và những công ty khác đang tích cực đóng góp mã, xem xét các thay đổi và tham gia vào quản trị. Đây không phải là một bản fork cộng đồng được duy trì bởi một số ít tình nguyện viên — đó là một dự án được tài trợ tốt, có nhân sự đầy đủ với lộ trình rõ ràng.

3. Phát triển tính năng

Tốc độ phát triển của Valkey đã vượt quá Redis trong một số lĩnh vực, đặc biệt là xung quanh hiệu năng đa luồng, cải tiến cụm (cluster) và khả năng quan sát. Khi Valkey tiếp tục phát triển, người dùng Deploynix được hưởng lợi từ những cải tiến này thông qua các bản cập nhật máy chủ.

Câu hỏi thường gặp

Tôi có thể vẫn sử dụng tên driver redis trong Laravel không?

Có. Valkey nói giao thức Redis, vì vậy driver redis của Laravel hoạt động mà không cần thay đổi. Không cần driver valkey — giao thức là giống hệt nhau.

PhpRedis có hoạt động với Valkey không?

Có. PhpRedis giao tiếp bằng giao thức RESP, mà Valkey triển khai. Không cần thay đổi phần mở rộng.

Predis có hoạt động với Valkey không?

Có. Lý do tương tự — nó sử dụng giao thức RESP.

Các công cụ GUI của Redis có hoạt động không?

Có. Các công cụ như RedisInsight, Medis, Another Redis Desktop Manager và các công cụ dòng lệnh như redis-cli đều hoạt động với Valkey.

Còn Redis Sentinel và Redis Cluster thì sao?

Valkey hỗ trợ cả Sentinel (để tính sẵn sàng cao) và Cluster (để phân vùng theo chiều ngang) với cùng cấu hình như Redis. Nếu bạn sử dụng một trong hai tính năng này, chúng hoạt động giống hệt với Valkey.

Tôi có thể sử dụng các module Redis với Valkey không?

Các module Redis (như RediSearch, RedisJSON, RedisTimeSeries) chủ yếu được phát triển bởi Redis Ltd. và không phải là một phần của dự án Valkey. Tuy nhiên, Valkey đang phát triển các chức năng tương tự một cách tự nhiên (native). Đối với hầu hết các ứng dụng Laravel, các module không được sử dụng — các cấu trúc dữ liệu cốt lõi (chuỗi, băm, danh sách, tập hợp, tập hợp được sắp xếp, luồng) bao gồm tất cả các trường hợp sử dụng phổ biến.

Còn Redis Stack thì sao?

Redis Stack là sản phẩm của Redis Ltd. đóng gói Redis với một số module. Nó không có sẵn cho Valkey. Nếu bạn phụ thuộc vào các tính năng của Redis Stack, hãy đánh giá xem các khả năng tự nhiên của Valkey (hoặc các giải pháp thay thế) có đáp ứng nhu cầu của bạn trước khi di chuyển.

Kết luận dành cho nhà phát triển Laravel

Nếu bạn đang bắt đầu một dự án mới, hãy sử dụng Valkey. Deploynix cung cấp nó theo mặc định, nó hoàn toàn tương thích với mã và cấu hình hiện có của bạn, và nó là tương lai của các kho lưu trữ dữ liệu trong bộ nhớ mã nguồn mở.

Nếu bạn đang chạy Redis trên các máy chủ hiện có, không có nhu cầu cấp thiết phải di chuyển. Ứng dụng của bạn sẽ hoạt động tốt với Redis trong tương lai gần. Nhưng khi bạn cung cấp máy chủ mới hoặc xây dựng lại hạ tầng của mình, việc mặc định chọn Valkey là sự lựa chọn thực tế.

Việc di chuyển là đơn giản — cùng giao thức, cùng driver, cùng cấu hình. Những thứ duy nhất thay đổi là tệp nhị phân chạy trên máy chủ và giấy phép mà nó đi kèm. Đối với ứng dụng Laravel của bạn, đó không phải là sự kiện gì to tát.

Sự thay đổi giấy phép của Redis là một khoảnh khắc quan trọng đối với cộng đồng mã nguồn mở, nhưng đối với các nhà phát triển Laravel, tác động thực tế là tối thiểu. Valkey là sự kế thừa trực tiếp và tương thích của Redis, được duy trì bởi một cộng đồng mạnh mẽ với sự quản trị rõ ràng và sự phát triển tích cực.

Deploynix sử dụng Valkey vì đó là lựa chọn kỹ thuật và cấp phép phù hợp cho một nền tảng triển khai cung cấp và quản lý máy chủ. Đối với ứng dụng Laravel của bạn, quá trình chuyển đổi diễn ra liền mạch — cache, queues, sessions, broadcasting và bất kỳ tính năng nào khác phụ thuộc vào Redis đều hoạt động giống hệt nhau.

Điều rút ra chính rất đơn giản: Valkey là Redis, được fork và tiếp tục phát triển dưới một giấy phép mở. Nếu ứng dụng của bạn sử dụng Redis ngày hôm nay, nó sẽ sử dụng Valkey vào ngày mai với thay đổi mã bằng số không. Đó là kiểu di chuyển tốt nhất — kiểu mà không có gì bị hỏng.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗