คำตอบสั้น ๆ: ติดตั้ง Redis และเปิด Object Cache ให้ WordPress ลดจำนวน Query ต่อหน้าลงอย่างชัดเจน พร้อมตั้งค่าที่ต้องระวังเมื่อมีหลายเว็บบนเครื่องเดียว
คู่มือนี้อธิบาย Redis Object Cache ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
WordPress เรียกข้อมูลชุดเดิมจากฐานข้อมูลซ้ำหลายครั้งในคำขอเดียว เช่น ค่าตั้งค่า ข้อมูลผู้ใช้ และเมนู โดยปกติมันเก็บผลไว้ในหน่วยความจำเฉพาะคำขอนั้นแล้วทิ้ง คำขอถัดไปจึงต้องถามฐานข้อมูลใหม่ทั้งหมด
Object Cache เก็บผลเหล่านั้นไว้ข้ามคำขอ ทำให้จำนวน Query ต่อหน้าลดลงได้มาก โดยเฉพาะบนเว็บที่มีปลั๊กอินเยอะหรือใช้ WooCommerce ซึ่งเห็นผลชัดเจนที่สุด
สิ่งที่ต้องเตรียม (Redis Object Cache)
- สิทธิ์ SSH บนเซิร์ฟเวอร์ หรือโฮสติ้งที่มี Redis ให้แล้ว
- สิทธิ์แก้ไฟล์
wp-config.php - หน่วยความจำว่างอย่างน้อย 256 MB สำหรับ Redis
ขั้นตอนที่ 1: วัดสถานะก่อน (Redis Object Cache)
ติดตั้ง Query Monitor แล้วเปิดหน้าแรก จดตัวเลขสองอย่างไว้เปรียบเทียบ จำนวน Query ทั้งหมด และเวลาที่ใช้กับฐานข้อมูล
wp eval 'global $wpdb; echo $wpdb->num_queries;'
ขั้นตอนที่ 2: ติดตั้ง Redis (Redis Object Cache)
sudo apt update
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-cli ping
ตั้งค่าให้เหมาะกับการเป็นแคช
sudo nano /etc/redis/redis.conf
bind 127.0.0.1 ::1
port 6379
maxmemory 512mb
maxmemory-policy allkeys-lru
# แคชไม่จำเป็นต้องคงทน ปิดเพื่อลดภาระดิสก์
save ""
appendonly no
sudo systemctl restart redis-server
redis-cli CONFIG GET maxmemory-policy
นโยบาย allkeys-lru สำคัญ มันทำให้ Redis ลบข้อมูลที่ไม่ได้ใช้นานที่สุดเมื่อหน่วยความจำเต็ม แทนที่จะปฏิเสธการเขียนซึ่งจะทำให้เว็บพัง
ขั้นตอนที่ 3: ติดตั้งส่วนขยายของ PHP
sudo apt install -y php8.3-redis
sudo systemctl restart php8.3-fpm
php -m | grep redis
ต้องเป็นเวอร์ชันที่ตรงกับ PHP ที่เว็บใช้จริง ตรวจด้วย php -v หากมีหลายเวอร์ชันบนเครื่องเดียวกัน
ขั้นตอนที่ 4: ตั้งค่าใน wp-config.php
nano /var/www/example.com/wp-config.php
เพิ่มก่อนบรรทัด /* That's all, stop editing! */
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_REDIS_DATABASE', 0);
// สำคัญมากเมื่อมีหลายเว็บใช้ Redis เครื่องเดียวกัน
define('WP_CACHE_KEY_SALT', 'example.com:');
// เปิด Object Cache
define('WP_CACHE', true);
WP_CACHE_KEY_SALT คือสิ่งที่ห้ามลืม หากมีสองเว็บใช้ Redis เดียวกันโดยไม่ตั้งค่านี้ ข้อมูลจะปนกัน และผู้ใช้เว็บหนึ่งอาจเห็นเนื้อหาของอีกเว็บ
ทางเลือกที่ปลอดภัยกว่าคือแยกฐานข้อมูลของ Redis ให้แต่ละเว็บ
// เว็บที่ 1
define('WP_REDIS_DATABASE', 0);
// เว็บที่ 2
define('WP_REDIS_DATABASE', 1);
ขั้นตอนที่ 5: ติดตั้งปลั๊กอินและเปิดใช้งาน
wp plugin install redis-cache --activate
wp redis enable
wp redis status
ผลลัพธ์ควรแสดง Status: Connected หากเป็น Not connected ให้ดูขั้นตอนแก้ปัญหาท้ายคู่มือ
ตรวจว่ามีไฟล์ object-cache.php ถูกสร้างขึ้นใน wp-content/ ซึ่งเป็นตัวที่ทำให้ WordPress ใช้ Redis จริง
ls -l /var/www/example.com/wp-content/object-cache.php