PHP Mysql + Cache

โค๊ดที่ต้องการให้อยู่ในรูปของ cache

$sql = "select * from smf_messages inner join smf_topics on smf_messages.id_topic=smf_topics.ID_TOPIC where smf_messages.ID_BOARD=1 group by smf_messages.ID_TOPIC order by smf_messages.ID_TOPIC

Cache ในรูปแบบใดล่ะครับ

  • file
  • memcached
  • apc
  • etc

ได้หมดครับ ไม่เกี่ยง

ผมเจอในบล๊อกของพี่ไอซ์มาครับ
http://www.icez.net/blog/111/php-simple-object-cache

ลองเอาไปดูครับ ไม่รู้จะถูกใจรึปล่าว

ขอบคุณครับ ลองแล้ว แต่ไม่ได้

ปล่อยของ เป็น file cache ครับ ใช้งานอยู่จริง

จะให้เร็ว cache พวก obj ดีกว่ามากครับ ภาพ ไฟล์ต่างๆ หนะครับ
พวกข้อมูล เล็กๆ น้อยๆ เท่านั้นเอง

ช่วยผมหน่อยครับ

ผมเอาโค๊ดไปใช้แล้วมัน error

แก้ตามนี้ครับ เก็บผลลัพธ์ที่เป็นข้อความ output แล้วเอามาแสดงเลย ไม่ต้องเอา query มาประมวลผล


<?php
require_once 'cache.php';
$cache_interval = 60;
$cache_name = 'smile';
include("connect_smile.php");

$output = Cache::fetch($cache_name, $cache_interval);

if(!$output) {

ขอบคุณครับ

และขอบคุณที่ย้ายมาหมวดนี้ หวังว่าจะมีประโยชน์กับบุคคลอื่นๆด้วยครับ

อีกแนวทางครับ Memcache : )


<?php
$memcache = new Memcache;
$memcache->addServer('127.0.0.1', 11211, true);

$timeout = 300;	// 5 นาที


$sql = "select * from smf_messages inner join smf_topics on smf_messages.id_topic=smf_topics.ID_TOPIC where smf_messages.ID_BOARD=1 group by smf_messages.ID_TOPIC order by smf_messages.ID_TOPIC

ลองเปลี่ยนจาก filecache มาเป็น memcache ดูแล้วครับ
เท่าที่สังเกตดูก็เร็วพอๆกัน เดี๋ยวรอดูตอนคนเข้าเยอะๆก่อนว่าจะต่างกันอย่างไร

ขอบคุณทั้ง 2 คนครับผม
+1

ถ้า filecache

ผลการทดลอง จากการเปลี่ยนจาก file มาใช้ mem ตามภาพเลยครับ
โดยรวมแล้วถือว่าทำงานได้เร็วไม่แตกต่างจากเดิม
แต่เจอ bug ใน code ของผมเองแหละ เล่นเอา server โหลดไปเลย
ตอนนี้เลยเอา memcache ออกกลับมาใช้ filecache เหมือนเดิมก่อน

ไม่ใช่ memcache ไม่ดีนะครับ แต่ผมเขียน class แล้วดันมี bug วางยาตัวเอง

ส่วนใหญ่จะ cache เป็น html ไว้ที่ local disk ไปเลย
เวลามีการ request ซ้ำ จะได้ไม่ต้องไป query ใหม่
แต่ไม่ได้ cache ที่ proxy อีกทีนึง เพราะมันก็ไม่มากเท่าไร
ไม่เหมือนพวก images, js, css อะไรพวกนี้

^
^
^

ตอนนี้ผมได้ลองใช้วิธี html ครับผม แต่ใช้วิธีใช้ cronjob gen เป็น html เอา

ทำยังไงหรอครับ

http://www.narisa.com/forums/index.php?showtopic=17913

แล้วก็สั่งให้ cronjob ทำทุกๆ 30 นาทีครับ

ผมว่าเก็บ data ไว้ใน filecache มันแปลกๆนะครับ
ถ้าเก็บไว้ใน memcache มันก็อยู่ใน memory ซึ่งทำงานได้เร็ว
ถ้าเก็บไว้ใน filecache มันก็อยู่ใน hdd ซึ่งทำให้ช้ากว่า memory
ถึงแม้ว่า web server มันจะ optimize static files ไว้ก็เถอะ

แต่ผมว่า optimize sql code + index น่าจะดีกว่านะครับ

สุดท้ายแล้วมันก็ไปไม่ไหวเหมือนกันครับ การใช้ memcache มีข้อดีที่ผมชอบคือ มัน scale out ได้ง่ายกว่าการ scale out database เยอะเลย แค่ตั้งเครื่องใหม่ แก้ code นิดหน่อยให้เห็นเครื่อง แล้วก็ใช้งานได้เลย ไม่เหมือนพวก database ที่ต้องมานั่งทำ replicate โน้นนี่ สารพัดครับ

สรุปคือ memcache มันก็เหมือนถังที่อยู่ใน memory ที่เอาอะไรไปใส่ไว้ก็ได้ ไม่จำเพาะว่าจะต้องเป็น record database เวลาใช้งานก็แค่ไปหยิบมาเลย ถ้าไม่เจอค่อยไปหาเอาใน database อีกที