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
- ลด DB Query ได้ 60–90% บนเว็บที่มี repeated queries สูง
- ลด TTFB (Time to First Byte) อย่างเห็นได้ชัด โดยเฉพาะหน้าที่ Load Plugin Data หลายตัว
- รองรับ Traffic Spike ได้ดีขึ้นเพราะ MySQL ไม่ต้องรับ Query หนักในเวลาเดียวกัน
- ใช้ร่วมกับ Page Cache ได้ — Redis ทำงานในระดับ PHP/DB ส่วน Page Cache ทำงานในระดับ HTTP
ความต้องการของระบบก่อนติดตั้ง
การติดตั้ง 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 จะเห็นข้อมูล:
- Status: Connected — Redis เชื่อมต่อสำเร็จ
- Cache Hits / Misses — อัตราส่วน Hit ที่ดีควรอยู่ที่ 80%+ หลังเว็บ warm-up
- Used Memory — ปริมาณ RAM ที่ 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 มีดังนี้:
- Status: Not Connected — ตรวจว่า Redis daemon ทำงานอยู่ (
systemctl status redis-server), ตรวจ firewall ว่าไม่ block port 6379, ตรวจ bind address ใน redis.conf ว่าตรงกับ HOST ใน wp-config.php - object-cache.php ไม่ถูกสร้าง — ตรวจสิทธิ์ write ของโฟลเดอร์ wp-content (ต้องเป็น 755 และเป็น owner ของ web server), ลอง FTP อัปโหลดไฟล์เองจากที่ Plugin เตรียมไว้
- Cache Hit Rate ต่ำมาก — เพิ่ม maxmemory ให้มากขึ้น, ตรวจว่า Plugin บางตัว bypass Object Cache ด้วย direct DB call โดยใช้ Query Monitor
- เว็บช้าลงหลังเปิด Redis — ตรวจ Connection timeout ใน wp-config.php (
WP_REDIS_TIMEOUTควรไม่เกิน 1–2 วินาที) เพราะถ้า Redis ตอบช้าแล้ว WordPress รอนานเกินไปจะ timeout ทุก Request - ข้อมูลเก่าไม่ได้รับการอัปเดต — ปกติ Plugin จะ Invalidate Cache อัตโนมัติ ถ้ายังเกิดปัญหาให้ตรวจ WP_REDIS_MAXTTL ว่าตั้งไว้สูงเกินไปหรือไม่
คำถามที่พบบ่อย (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