Redis và Valkey: So sánh hiệu năng, cấu hình tối ưu

Redis đã trở thành một thành phần cốt lõi trong các hệ thống web cho việc lưu trữ bộ nhớ đệm, hàng đợi tin nhắn và thống kê thời gian thực. Tuy nhiên, gần đây, với xu hướng thương mại hóa ngày càng tăng của Redis, Valkey – một dự án thay thế mã nguồn mở mới – đã xuất hiện dưới sự bảo trợ của Linux Foundation, nhằm duy trì tinh thần mã nguồn mở của Redis và cải tiến về mặt hiệu năng.

Valkey được tạo ra vào tháng 3/2024 khi Redis thông báo thay đổi giấy phép từ BSD 3-clause sang mô hình “source-available”, khiến cả nhà phát triển và người dùng không hài lòng. Bài viết này sẽ so sánh Redis và Valkey, cung cấp cấu hình tối ưu cho Valkey, và hướng dẫn cách triển khai để nâng cao hiệu suất cho WordPress.

Sự khác biệt chính giữa Redis và Valkey

Đặc điểm Redis Valkey
Tổ chức sở hữu Redis Labs (công ty thương mại) Linux Foundation (dự án cộng đồng)
Hỗ trợ đa luồng Chỉ hỗ trợ đa luồng cho IO Hỗ trợ thực sự đa luồng cho xử lý lệnh
Hiệu năng Thông lượng 20-25 vạn req/s Thông lượng có thể đạt 35-40 vạn req/s
Chiến lược mã nguồn mở Lõi mã nguồn mở, module đóng Hoàn toàn mã nguồn mở, điều này đáp ứng nhu cầu của cộng đồng về một giải pháp thật sự mã nguồn mở
Khả năng tương thích RDB Hỗ trợ định dạng mới Hỗ trợ định dạng chuẩn Redis (một số phiên bản có giới hạn)
Phù hợp với Dịch vụ bộ nhớ đệm nhỏ và trung bình Ứng dụng với lưu lượng cao, hệ thống bán hàng, game, và hệ thống thông báo

Ưu điểm của Valkey

  • Khả năng xử lý đồng thời mạnh mẽ: Valkey đẩy xa hơn ranh giới hiệu suất bằng cách tích hợp các tính năng đa luồng và khả năng mở rộng nâng cao, cho phép nó xử lý khối lượng công việc tăng cao hiệu quả hơn.
  • Cơ chế loại bỏ bộ nhớ thông minh hơn: Hỗ trợ LRU, LFU và xóa bất đồng bộ, giúp giải phóng bộ nhớ hiệu quả hơn.
  • Cấu hình tương thích hoàn toàn với Redis: Valkey được thiết kế như một giải pháp thay thế trực tiếp cho Redis OSS, không cần thay đổi mã nguồn ứng dụng hiện có, bao gồm các extension PHP hoặc plugin WordPress.
  • Hoàn toàn mã nguồn mở, không có giới hạn thương mại: Dự án được Linux Foundation hỗ trợ, đảm bảo nó sẽ luôn là mã nguồn mở mãi mãi.

Đúng vậy, máy chủ cần cài đặt Valkey tương tự như cách cài đặt Redis. Valkey được thiết kế để là một giải pháp thay thế trực tiếp cho Redis, vì vậy quá trình cài đặt và cấu hình rất giống nhau.

Cách cài đặt Valkey trên máy chủ

1. Cài đặt trên hệ thống Linux

Đối với các hệ thống Linux phổ biến, quy trình cài đặt sẽ tương tự như sau:

Ubuntu/Debian:

# Cài đặt các gói cần thiết
sudo apt-get update
sudo apt-get install -y git make gcc

# Clone mã nguồn Valkey
git clone https://github.com/valkey-io/valkey.git
cd valkey

# Biên dịch và cài đặt
make
sudo make install

# Tạo thư mục cấu hình và dữ liệu
sudo mkdir -p /etc/valkey /var/lib/valkey

# Sao chép file cấu hình mẫu
sudo cp valkey.conf /etc/valkey/

# Tạo service để quản lý Valkey
sudo cp utils/systemd/valkey.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable valkey
sudo systemctl start valkey

Almalinux/RHEL/Fedora:

# Cài đặt các gói cần thiết
sudo dnf install -y git make gcc

# Clone và cài đặt tương tự như trên Ubuntu/Debian

2. Sử dụng các gói có sẵn (đang được phát triển)

Valkey đang dần được thêm vào các kho phần mềm của các bản phân phối Linux. Trong tương lai, có thể sẽ có lệnh đơn giản hơn như:

# Ubuntu/Debian (ví dụ, chưa chắc đã có sẵn)
sudo apt-get install valkey

# Almalinux/RHEL (ví dụ, chưa chắc đã có sẵn)
sudo dnf install valkey

Tương thích với Redis

Điểm quan trọng cần nhấn mạnh là Valkey được thiết kế để hoạt động như một sự thay thế trực tiếp cho Redis. Điều này có nghĩa là:

  • Các ứng dụng đã được cấu hình để sử dụng Redis có thể kết nối trực tiếp với Valkey mà không cần thay đổi mã nguồn
  • Các extension PHP dành cho Redis (như php-redis) vẫn hoạt động bình thường với Valkey
  • Các plugin WordPress dành cho Redis (như Redis Object Cache) cũng tương thích với Valkey

Cài đặt PHP extension cho Valkey

Đối với WordPress, bạn cần cài đặt PHP Redis extension để kết nối với Valkey:

# Ubuntu/Debian
sudo apt-get install php-redis

# Almalinux/RHEL
sudo dnf install php-pecl-redis

# Khởi động lại PHP-FPM hoặc Apache tùy vào cấu hình máy chủ của bạn
sudo systemctl restart php-fpm
# hoặc
sudo systemctl restart apache2

Cấu hình Valkey được đề xuất (valkey.conf)

Dưới đây là một ví dụ về cấu hình valkey.conf đã được tối ưu hóa, phù hợp cho các tình huống có lưu lượng truy cập cao như LNMP, WordPress, Laravel:

# Cài đặt cơ bản
bind 0.0.0.0
protected-mode yes
port 6379
timeout 300
tcp-keepalive 300

# Tối ưu hiệu năng
io-threads 4
io-threads-do-reads yes
databases 1
maxclients 10000

# Quản lý bộ nhớ
maxmemory 2gb
maxmemory-policy allkeys-lru

# Tắt tính năng lưu trữ liên tục (chỉ áp dụng cho mục đích bộ nhớ đệm)
save ""
appendonly no
rdbcompression no
rdbchecksum no

# Cài đặt nhật ký
loglevel warning
logfile ""

# Tối ưu hóa xóa bất đồng bộ
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes

Giải thích:

  • io-threads-do-reads kích hoạt hoạt động đọc song song, khuyến nghị sử dụng với máy có từ 4 nhân trở lên.
  • maxmemory-policy allkeys-lru đảm bảo việc loại bỏ dữ liệu bộ nhớ đệm thông minh.
  • Các tùy chọn lazyfree-* kích hoạt giải phóng bộ nhớ không đồng bộ, tránh chặn luồng chính.

Ví dụ triển khai nhanh với Docker

valkey:
  image: valkey/valkey:alpine
  container_name: redis
  restart: always
  ports:
    - "6379:6379"
  volumes:
    - ./valkey.conf:/etc/valkey.conf
    - ./data:/data
  command: valkey-server /etc/valkey.conf
  networks:
    - web_default

Tích hợp Valkey với WordPress

Để thiết lập bộ đệm cho WordPress với Valkey, bạn có thể sử dụng plugin “redis-cache” và thêm cấu hình vào file wp-config.php. Dưới đây là các bước thực hiện:

  1. Cài đặt plugin Redis Cache cho WordPress từ kho plugin hoặc qua WP-CLI:
    wp plugin install redis-cache --activate
    
  2. Thêm cấu hình vào file wp-config.php:
    /** VALKEY-CACHE **/
    define('WP_REDIS_HOST', 'địa_chỉ_IP_valkey');
    define('WP_REDIS_PORT', '6379');
    define('WP_REDIS_PASSWORD', 'mật_khẩu_valkey');
    
  3. Cập nhật drop-in sử dụng WP-CLI:
    wp redis update-dropin
    
  4. Kiểm tra trạng thái kết nối:
    wp redis status
    

Khi thiết lập thành công, plugin sẽ hiển thị trạng thái “Connected” và thông tin kết nối sẽ được hiển thị trong tab tổng quan. Nếu trạng thái là “Not Connected”, hãy xem phần Diagnostics để biết chi tiết về lý do kết nối thất bại.

Lợi ích khi dùng Valkey cho WordPress

  1. Hiệu suất cao hơn: Các đánh giá ban đầu cho thấy Valkey hoạt động tương đương, nếu không muốn nói là tốt hơn Redis trong nhiều tình huống.
  2. Tiết kiệm chi phí: Đối với các trang WordPress có lưu lượng truy cập cao, việc sử dụng Valkey có thể mang lại khoản tiết kiệm đáng kể, đặc biệt khi sử dụng các dịch vụ quản lý trên các nền tảng đám mây.
  3. Chuyển đổi rủi ro thấp: Khả năng tương thích ngược mạnh mẽ của Valkey với Redis giảm thiểu rủi ro di chuyển. Các plugin WordPress và extensions PHP hiện tại vẫn hoạt động bình thường.
  4. Tương thích với hệ sinh thái Redis: Một trong những ưu điểm của Valkey là nó duy trì khả năng tương thích với nhiều công cụ Redis phổ biến bao gồm PHP-Redis và Redis Object Cache cho WordPress.
  5. Hiệu quả bộ nhớ: Valkey tối ưu việc sử dụng bộ nhớ, đặc biệt quan trọng trong môi trường có giới hạn tài nguyên.

Các trường hợp phù hợp để chuyển sang Valkey

  1. Instance Redis có QPS liên tục cao hơn 10w
  2. Container Redis có mức sử dụng CPU gần 100%, nhưng độ trễ tăng cao
  3. Các dự án ưu tiên giấy phép mã nguồn mở
  4. Ứng dụng có thông lượng cao có thể hưởng lợi từ việc cải thiện đa luồng
  5. Môi trường nơi hiệu quả bộ nhớ là quan trọng
  6. Dịch vụ WordPress, Laravel, Node.js thường xuyên gặp lỗi GET/SET/DEL của Redis

Mã PHP để kết nối với Valkey

Dưới đây là ví dụ về cách kết nối với Valkey từ PHP, có thể sử dụng trong plugin WordPress hoặc theme functions.php:

<?php
class ValkeyCacheConnect {
    private $redis = null;
    
    public function __construct() {
        if (!extension_loaded('redis')) {
            error_log('PHP Redis extension không được cài đặt');
            return;
        }
        
        try {
            $this->redis = new Redis();
            $this->redis->connect(
                defined('WP_REDIS_HOST') ? WP_REDIS_HOST : '127.0.0.1', 
                defined('WP_REDIS_PORT') ? WP_REDIS_PORT : 6379,
                defined('WP_REDIS_TIMEOUT') ? WP_REDIS_TIMEOUT : 1
            );
            
            if (defined('WP_REDIS_PASSWORD') && WP_REDIS_PASSWORD) {
                $this->redis->auth(WP_REDIS_PASSWORD);
            }
            
            if (defined('WP_REDIS_DATABASE') && WP_REDIS_DATABASE) {
                $this->redis->select(WP_REDIS_DATABASE);
            }
        } catch (Exception $e) {
            error_log('Không thể kết nối với Valkey: ' . $e->getMessage());
            $this->redis = null;
        }
    }
    
    public function get($key) {
        if (!$this->redis) return false;
        return $this->redis->get($key);
    }
    
    public function set($key, $value, $expiry = 3600) {
        if (!$this->redis) return false;
        return $this->redis->set($key, $value, $expiry);
    }
    
    public function delete($key) {
        if (!$this->redis) return false;
        return $this->redis->del($key);
    }
    
    public function flush() {
        if (!$this->redis) return false;
        return $this->redis->flushDb();
    }
}

// Sử dụng:
// $cache = new ValkeyCacheConnect();
// $cache->set('test_key', 'test_value', 3600);
// echo $cache->get('test_key');

Phát triển Plugin WordPress sử dụng Valkey

Nếu muốn phát triển plugin riêng sử dụng Valkey cho WordPress, bạn có thể bắt đầu với cấu trúc cơ bản sau:

<?php
/**
 * Plugin Name: Valkey Cache Manager for WordPress
 * Description: Quản lý bộ nhớ đệm WordPress sử dụng Valkey
 * Version: 1.0.0
 * Author: Vu Tru So
 */

if (!defined('ABSPATH')) {
    exit;
}

class ValkeyCacheManager {
    private $redis = null;
    private $prefix = 'wp_valkey_';
    private $enabled = false;
    
    public function __construct() {
        $this->init();
    }
    
    public function init() {
        // Kiểm tra extension Redis
        if (!extension_loaded('redis')) {
            add_action('admin_notices', function() {
                echo '<div class="error"><p>Valkey Cache Manager yêu cầu PHP Redis extension.</p></div>';
            });
            return;
        }
        
        // Kết nối đến Valkey server
        try {
            $this->redis = new Redis();
            $host = defined('WP_REDIS_HOST') ? WP_REDIS_HOST : '127.0.0.1';
            $port = defined('WP_REDIS_PORT') ? WP_REDIS_PORT : 6379;
            $timeout = defined('WP_REDIS_TIMEOUT') ? WP_REDIS_TIMEOUT : 1;
            
            if ($this->redis->connect($host, $port, $timeout)) {
                // Xác thực nếu cần
                if (defined('WP_REDIS_PASSWORD') && WP_REDIS_PASSWORD) {
                    $this->redis->auth(WP_REDIS_PASSWORD);
                }
                
                // Chọn database nếu được cấu hình
                if (defined('WP_REDIS_DATABASE') && WP_REDIS_DATABASE) {
                    $this->redis->select(WP_REDIS_DATABASE);
                }
                
                $this->enabled = true;
                
                // Đăng ký các hooks
                $this->register_hooks();
            }
        } catch (Exception $e) {
            add_action('admin_notices', function() use ($e) {
                echo '<div class="error"><p>Không thể kết nối đến Valkey server: ' . esc_html($e->getMessage()) . '</p></div>';
            });
        }
    }
    
    private function register_hooks() {
        // Xóa cache khi có nội dung mới được đăng
        add_action('save_post', [$this, 'flush_post_cache'], 10, 3);
        
        // Thêm menu quản trị
        add_action('admin_menu', [$this, 'add_admin_menu']);
        
        // Thêm các hooks khác nếu cần
    }
    
    public function flush_post_cache($post_id, $post, $update) {
        if (wp_is_post_revision($post_id) || wp_is_post_autosave($post_id)) {
            return;
        }
        
        $this->redis->del($this->prefix . 'post_' . $post_id);
        $this->redis->del($this->prefix . 'front_page');
    }
    
    public function add_admin_menu() {
        add_management_page(
            'Valkey Cache Manager',
            'Valkey Cache',
            'manage_options',
            'valkey-cache-manager',
            [$this, 'render_admin_page']
        );
    }
    
    public function render_admin_page() {
        // Xử lý hành động nếu có
        if (isset($_POST['flush_cache']) && check_admin_referer('valkey_cache_action')) {
            $this->redis->flushDB();
            echo '<div class="updated"><p>Đã xóa toàn bộ bộ nhớ đệm!</p></div>';
        }
        
        // Thông tin trạng thái
        $info = $this->redis->info();
        $stats = [
            'Phiên bản Valkey' => $info['redis_version'] ?? 'Unknown',
            'Bộ nhớ đã sử dụng' => isset($info['used_memory_human']) ? $info['used_memory_human'] : 'Unknown',
            'Thời gian hoạt động' => isset($info['uptime_in_days']) ? $info['uptime_in_days'] . ' ngày' : 'Unknown',
            'Số lượng keys' => $this->redis->dbSize(),
        ];
        
        // Hiển thị giao diện
        echo '<div class="wrap">';
        echo '<h1>Valkey Cache Manager</h1>';
        
        echo '<h2>Thông tin hệ thống</h2>';
        echo '<table class="widefat">';
        foreach ($stats as $key => $value) {
            echo '<tr>';
            echo '<td><strong>' . esc_html($key) . '</strong></td>';
            echo '<td>' . esc_html($value) . '</td>';
            echo '</tr>';
        }
        echo '</table>';
        
        echo '<h2>Hành động</h2>';
        echo '<form method="post">';
        wp_nonce_field('valkey_cache_action');
        echo '<p><input type="submit" name="flush_cache" class="button button-primary" value="Xóa toàn bộ bộ nhớ đệm"></p>';
        echo '</form>';
        
        echo '</div>';
    }
}

// Khởi tạo plugin
new ValkeyCacheManager();

Kết luận

Valkey mang đến một giải pháp thay thế đáng tin cậy cho nhà phát triển muốn chuyển từ Redis mà không hy sinh hiệu suất, tính dễ sử dụng hoặc khả năng tương thích công cụ. Với sự ủng hộ mạnh mẽ từ cộng đồng và các công ty công nghệ lớn, Valkey đang nhanh chóng vượt qua Redis về mức độ quan tâm và áp dụng.

Đối với các dự án WordPress, việc chuyển đổi sang Valkey có thể dễ dàng thực hiện, chỉ cần một vài thay đổi cấu hình mà không cần sửa đổi mã nguồn hiện có. Hiệu suất cao hơn, khả năng mở rộng tốt hơn và cam kết mã nguồn mở đầy đủ làm cho Valkey trở thành một lựa chọn hấp dẫn cho các ứng dụng WordPress với lưu lượng truy cập cao.

Bằng cách tận dụng sức mạnh của Valkey và các cấu hình được tối ưu hóa được cung cấp trong bài viết này, bạn có thể cải thiện đáng kể hiệu suất trang web WordPress, giảm thời gian phản hồi và nâng cao trải nghiệm người dùng tổng thể.

Đánh giá

donate Nếu bạn thấy bài viết có ích bạn có thể donate cho team hoặc chia sẻ bài viết này. Ngoài ra bạn có thể yêu cầu thêm bài viết tại đây
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, dịch vụ quảng cáo Google, quảng cáo Facebook, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan