Redis Object Cache เป็นหนึ่งในเทคนิคการเร่งความเร็ว WordPress ที่มีประสิทธิภาพสูงที่สุด โดยเฉพาะสำหรับเว็บไซต์ที่มีการเรียกข้อมูลจากฐานข้อมูล (MySQL) จำนวนมากในแต่ละ Request เช่น เว็บ E-Commerce, Membership Site หรือเว็บที่มีเนื้อหาหลายหมวดหมู่ Redis ทำงานโดยเก็บผลลัพธ์ของ Database Query และ PHP Object ที่คำนวณแล้วไว้ใน RAM แทนที่จะให้ WordPress รัน Query เดิมซ้ำๆ ทุก Request บทความนี้จะพาคุณติดตั้งและตั้งค่า Redis Object Cache ตั้งแต่ต้นจนใช้งานได้จริงพร้อมคำแนะนำการปรับแต่งที่เหมาะกับการใช้งานจริง

Redis Object Cache คืออะไรและทำงานอย่างไร

ก่อนลงมือติดตั้ง ควรเข้าใจว่า Redis ช่วยแก้ปัญหาอะไรใน WordPress ทุกครั้งที่ผู้เยี่ยมชมโหลดหน้าเว็บ WordPress จะรัน PHP Script ที่ต้องติดต่อกับฐานข้อมูล MySQL หลายสิบครั้งต่อ Request เช่น ดึง Post content, ดึง Widget data, ดึง Theme option, ดึง Plugin configuration ฯลฯ บน WordPress เว็บที่มี Plugin หนักๆ อาจมี DB Query มากกว่า 100 ครั้งต่อ Page Load

WordPress มี Object Cache API ในตัว แต่โดย default จะเก็บข้อมูลแค่ในช่วงชีวิตของ PHP Request นั้น (in-memory within request) หมายความว่า Request ถัดไปจะต้องวน Query ใหม่ทั้งหมดอีกครั้ง Redis เข้ามาแก้ปัญหานี้โดยทำตัวเป็น Persistent Object Cache ที่อยู่นอก PHP Process ข้อมูลที่ Cache ไว้จะยังคงอยู่แม้ PHP Process จบลงแล้ว ทำให้ Request ต่อๆ ไปดึงข้อมูลจาก Redis RAM แทนที่จะวิ่งไปถาม MySQL

ความต้องการของระบบก่อนติดตั้ง

การติดตั้ง Redis Object Cache บน WordPress ต้องการ 3 ส่วนประกอบหลักดังนี้:

ส่วนประกอบ ความต้องการขั้นต่ำ หมายเหตุ
Redis Server Redis 4.0 ขึ้นไป (แนะนำ 6.x+) ต้องเป็น VPS หรือ Server ที่ติดตั้ง Redis เองได้
PHP Extension phpredis หรือ predis phpredis แนะนำ (เร็วกว่า predis เพราะเป็น C extension)
WordPress Plugin Redis Object Cache Plugin ชื่อเก่า "WP Redis" ตอนนี้ชื่อ "Redis Object Cache" ใน WordPress.org
RAM RAM รวมอย่างน้อย 1 GB จัดสรร 64–256 MB ให้ Redis (ตาม traffic)

ถ้าคุณใช้ Shared Hosting มักไม่สามารถติดตั้ง Redis Server เองได้ ต้องตรวจสอบกับ Hosting Provider ว่ารองรับ Redis หรือไม่ สำหรับ VPS คุณมีสิทธิ์ Root Access ซึ่งสามารถติดตั้ง Redis ได้อย่างเต็มที่

ขั้นตอนที่ 1 — ติดตั้ง Redis Server บน Ubuntu/Debian

เข้าสู่ VPS ผ่าน SSH แล้วรันคำสั่งต่อไปนี้เพื่อติดตั้ง Redis:

sudo apt update
sudo apt install redis-server -y

หลังติดตั้งเสร็จ ให้แก้ไขไฟล์ Config เพื่อตั้งค่าที่จำเป็น:

sudo nano /etc/redis/redis.conf

ค้นหาและแก้ไขค่าต่อไปนี้:

# บังคับให้ Redis bind เฉพาะ localhost (ความปลอดภัย)
bind 127.0.0.1 ::1

# เปลี่ยน supervised เป็น systemd
supervised systemd

# ตั้ง maxmemory (ปรับตาม RAM ที่มี)
maxmemory 128mb

# กำหนด eviction policy เมื่อ Cache เต็ม
maxmemory-policy allkeys-lru

# เปิด socket ให้ PHP ติดต่อได้เร็วขึ้น (ไม่บังคับ แต่แนะนำ)
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770

บันทึกไฟล์แล้ว restart Redis:

sudo systemctl restart redis-server
sudo systemctl enable redis-server

# ตรวจสอบว่า Redis ทำงานอยู่
sudo systemctl status redis-server

# ทดสอบการเชื่อมต่อ
redis-cli ping
# ผลลัพธ์ที่ถูกต้อง: PONG

ขั้นตอนที่ 2 — ติดตั้ง PHP Redis Extension

Plugin WordPress ต้องการ PHP Extension เพื่อสื่อสารกับ Redis Server ตรวจสอบว่ามีอยู่แล้วด้วยคำสั่ง:

php -m | grep redis

ถ้าไม่มีผลลัพธ์ ให้ติดตั้ง phpredis extension:

# สำหรับ PHP 8.1 (เปลี่ยนเลขเวอร์ชันตามที่ใช้)
sudo apt install php8.1-redis -y

# หรือถ้าใช้ PHP 8.3
sudo apt install php8.3-redis -y

# Restart PHP-FPM หลังติดตั้ง
sudo systemctl restart php8.3-fpm

ตรวจสอบอีกครั้งว่า Extension โหลดแล้ว:

php -m | grep redis
# ต้องเห็น: redis

เคล็ดลับ: ถ้า Hosting ของคุณใช้ DirectAdmin อาจมี Redis ให้เปิดใช้งานได้จากแผงควบคุมโดยตรงโดยไม่ต้องรันคำสั่งเอง ลองตรวจดูใน Software > PHP Extensions หรือติดต่อ Support ก่อนจะประหยัดเวลาได้มาก

ขั้นตอนที่ 3 — ติดตั้งและตั้งค่า Plugin บน WordPress

ในแผง WordPress Admin ไปที่ Plugins > Add New แล้วค้นหา "Redis Object Cache" (ผู้พัฒนา Till Krüss) กด Install แล้ว Activate ได้เลย

จากนั้นแก้ไขไฟล์ wp-config.php เพิ่ม config ก่อนบรรทัด /* That's all, stop editing! */:

// Redis Object Cache Configuration
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );

// ถ้าเปิด Unix Socket ไว้ (แนะนำ — เร็วกว่า TCP)
// define( 'WP_REDIS_PATH', '/var/run/redis/redis-server.sock' );

// Database Index (0-15) — ใช้คนละ index ถ้ามีหลาย WordPress บน Server เดียวกัน
define( 'WP_REDIS_DATABASE', 0 );

// Timeout (วินาที)
define( 'WP_REDIS_TIMEOUT', 1 );
define( 'WP_REDIS_READ_TIMEOUT', 1 );

// Prefix สำหรับ Cache Key (ควรใส่ชื่อเว็บ กัน conflict กับ app อื่น)
define( 'WP_REDIS_PREFIX', 'mywp_' );

// Cache TTL (วินาที) — default 0 หมายถึง ไม่หมดอายุ จนกว่าจะถูก Evict
define( 'WP_REDIS_MAXTTL', 86400 );  // 24 ชั่วโมง

บันทึกไฟล์แล้วไปที่ Settings > Redis ใน WordPress Admin แล้วกดปุ่ม Enable Object Cache Plugin จะคัดลอก object-cache.php ไปไว้ที่ wp-content/object-cache.php ซึ่งเป็นไฟล์ที่ WordPress ใช้เรียก Cache Driver

ขั้นตอนที่ 4 — ตรวจสอบว่า Cache ทำงานถูกต้อง

หลัง Enable แล้ว ให้ตรวจสอบหน้า Settings > Redis จะเห็นข้อมูล:

ตรวจสอบผ่าน Command Line ได้เช่นกัน:

# ดู stats ทั้งหมดของ Redis
redis-cli info stats

# ดู Memory usage
redis-cli info memory

# ดูจำนวน Keys ทั้งหมด
redis-cli dbsize

# Monitor real-time commands (Ctrl+C เพื่อหยุด)
redis-cli monitor

นอกจากนี้ยังสามารถตรวจสอบผ่าน Query Monitor Plugin ที่จะแสดงว่า Object Cache Hit/Miss แต่ละ Request เพื่อดูว่า Plugin ไหนดึง DB บ่อยที่สุด

การปรับแต่งขั้นสูงเพื่อประสิทธิภาพสูงสุด

เมื่อ Redis ทำงานพื้นฐานแล้ว มีการปรับแต่งเพิ่มเติมที่ช่วยเพิ่มประสิทธิภาพได้อีก:

1. ใช้ Unix Socket แทน TCP

Unix Socket เชื่อมต่อผ่าน file system แทนการผ่าน TCP/IP Stack ทำให้เร็วกว่าและ Latency ต่ำกว่าสำหรับการเชื่อมต่อ localhost ให้เพิ่มผู้ใช้ web server เข้า group redis:

# เพิ่ม www-data (หรือ nginx) เข้า group redis
sudo usermod -aG redis www-data

# ตรวจสอบ socket ไฟล์
ls -la /var/run/redis/redis-server.sock

แล้วเปลี่ยน config ใน wp-config.php จาก TCP เป็น Socket:

// ลบหรือ comment บรรทัด HOST/PORT
// define( 'WP_REDIS_HOST', '127.0.0.1' );
// define( 'WP_REDIS_PORT', 6379 );

// ใช้ Socket แทน
define( 'WP_REDIS_PATH', '/var/run/redis/redis-server.sock' );

2. ตั้ง Password ให้ Redis (ความปลอดภัย)

แม้ Redis bind เฉพาะ localhost แต่การตั้ง Password เพิ่มความปลอดภัยอีกชั้น:

# ใน /etc/redis/redis.conf
requirepass your-strong-password-here

แล้วเพิ่ม password ใน wp-config.php:

define( 'WP_REDIS_PASSWORD', 'your-strong-password-here' );

3. ตั้งค่า maxmemory-policy อย่างถูกต้อง

ค่า allkeys-lru เหมาะที่สุดสำหรับ WordPress Object Cache เพราะจะลบ Key ที่ใช้น้อยที่สุดออกโดยอัตโนมัติเมื่อ Memory เต็ม แทนที่จะ Return Error ทำให้ WordPress ยังทำงานได้ปกติแม้ Cache เต็ม

# ตั้งค่าใน /etc/redis/redis.conf หรือผ่าน redis-cli แบบ real-time
redis-cli config set maxmemory-policy allkeys-lru

# ดูค่าปัจจุบัน
redis-cli config get maxmemory-policy

การ Monitor และ Debug Redis Cache

หลังติดตั้งแล้ว การ Monitor สม่ำเสมอช่วยให้รู้ว่า Cache ทำงานดีแค่ไหนและมีปัญหาอะไรหรือไม่:

ดู Cache Hit Rate

# Hit Rate = keyspace_hits / (keyspace_hits + keyspace_misses) × 100
redis-cli info stats | grep -E "keyspace_hits|keyspace_misses"

# ผลตัวอย่างที่ดี:
# keyspace_hits:125400
# keyspace_misses:8200
# Hit Rate = 125400 / (125400+8200) = 93.8%

Hit Rate ควรอยู่ที่ 80%+ สำหรับ WordPress ที่ใช้งานปกติ ถ้าต่ำกว่า 50% อาจหมายถึง maxmemory ต่ำเกินไปหรือ eviction เกิดบ่อย

ตรวจสอบ Memory Usage

redis-cli info memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio"

# ตัวอย่างผลลัพธ์:
# used_memory_human:45.23M        ← RAM ที่ใช้จริง
# maxmemory_human:128.00M         ← ขีดจำกัดที่ตั้งไว้
# mem_fragmentation_ratio:1.12    ← ควรอยู่ระหว่าง 1.0–1.5 ถ้าสูงกว่า 2 ควร restart Redis

ล้าง Cache เมื่อจำเป็น

# ล้าง Cache ทั้งหมดบน Database 0 (หรือ DB ที่ WordPress ใช้)
redis-cli -n 0 flushdb

# ล้าง Keys ที่ขึ้นต้นด้วย prefix เฉพาะ (ไม่กระทบ app อื่น)
redis-cli --scan --pattern "mywp_*" | xargs redis-cli del

# ล้างผ่าน WordPress Admin
# Settings > Redis > Flush Cache

ปัญหาที่พบบ่อยและวิธีแก้

ปัญหาที่พบบ่อยในการติดตั้งและใช้งาน Redis Object Cache มีดังนี้:

คำถามที่พบบ่อย (FAQ)

Redis Object Cache ต่างจาก Page Cache อย่างไร

Page Cache (เช่น WP Super Cache หรือ LiteSpeed Cache) บันทึกหน้า HTML สำเร็จรูปไว้บนดิสก์เพื่อให้เสิร์ฟได้โดยไม่ต้องรัน PHP เลย ส่วน Redis Object Cache ทำงานในระดับ PHP/MySQL โดยเก็บผลลัพธ์ของ Database Query และ Object อื่นๆ ใน RAM เพื่อให้ PHP ไม่ต้องวน Query DB ซ้ำๆ ทั้งสองใช้ร่วมกันได้และเสริมกัน — Page Cache ลด overhead PHP ส่วน Object Cache ลด overhead DB

Hosting ทั่วไปสามารถใช้ Redis ได้ไหม

ขึ้นอยู่กับ Hosting Provider บาง Hosting ที่รองรับ PHP Object Cache อาจเปิด Redis socket ให้ใช้ได้ แต่ส่วนใหญ่ Shared Hosting ไม่มี Redis Server ให้ใช้เองได้ ถ้า Hosting ไม่รองรับ Redis สามารถใช้ Memcached แทนได้บางส่วน หรือเลือกใช้ VPS ที่ติดตั้ง Redis เองได้

ต้อง Flush Cache ทุกครั้งที่อัปเดตเนื้อหา WordPress ไหม

Plugin WP Redis (Redis Object Cache) จะ Invalidate Cache Key ที่เกี่ยวข้องโดยอัตโนมัติเมื่อคุณบันทึกโพสต์ หน้า หรืออัปเดต Option ใดๆ ใน WordPress Admin ดังนั้นโดยปกติไม่ต้อง Flush Cache เองด้วยมือ อย่างไรก็ตามถ้าเกิดปัญหาแสดงข้อมูลเก่า สามารถ Flush ได้จากหน้า Settings > Redis ใน WordPress หรือรันคำสั่ง wp cache flush ผ่าน WP-CLI

Redis ใช้ RAM เท่าไรและจะทำให้ Server ช้าลงได้ไหม

Redis ใช้ RAM ตาม maxmemory ที่ตั้งค่าไว้ในไฟล์ redis.conf สำหรับ WordPress เว็บทั่วไปมักตั้ง 64MB–256MB ก็เพียงพอ Redis ใช้ CPU น้อยมากเพราะทำงานใน Memory ล้วนๆ ไม่มีการ I/O ดิสก์ ดังนั้นจะทำให้ Server เร็วขึ้นไม่ช้าลง ยกเว้นกรณีที่ maxmemory น้อยเกินไปและ Redis ต้อง Evict Keys บ่อยๆ ซึ่งจะลดประสิทธิภาพของ Cache ลง

Hosting ที่ออปติไมซ์สำหรับ WordPress

AsiaGB Hosting รองรับ PHP 8.3 MySQL LiteSpeed Cache และ WordPress Toolkit เริ่มต้น 500 บาท/ปี

ดูแพ็กเกจ Hosting