jQueryTips by Tee++;

  • Home
  • Videos
  • jQueryTips's Fans

Coding like playing a piano.

Subscribe RSS

Search

Search

Sponsored

jQueryTips on Social

Followers

hide
Chainnnn Pang25441 Dexteri@n Ton KanexKane Supachai JustDoIt Rut petchy Tophit anndrew Webmaster

Categories

hide
  • Programing
  • Database
  • Framework
  • Mobile Development
    • Titanium Mobile
    • PhoneGap
  • Life

Tag Cloud

hide
PHP JavaScript MySQL XML Mobile jQuery CodeIgniter Hash php xml Debug Library Zend API Events Plugins Facebook Basic Registration Tool Twitter Search Swath Performance ffmpeg YouTube Web Service Yahoo! NoSQL MongoDB PhoneGap

Recent Posts

hide
  • ใครๆ ก็มี Utils เอางี้เราเพิ่ม Utils ให้กับ CodeIgniter กันบ้าง
  • แนะนำ JS.Class (A JavaScript class library)
  • PHP กับ OOP มาปูพื้นฐานกันเสียใหม่ก่อน
  • ประกาศข่าวสารจาก Admin
  • JSFIDDLE สุดยอด Tools สำหรับการ Debug การเขียนตัวอย่างโคด
  • Titanium Mobile + HTML + Native Scrolling
  • HTML to PDF ตัวไหนดี วันนี้ผมมีคำตอบ ...
  • ทำความรู้จักกับ JavaScript Pattern ในเชิงลึก
  • ผมบอกคุณแล้ว .... คนโง่ก็ Code ได้
  • วันนี้ มาออกแบบ Web Service ด้วย PHP กันเถอะ (CodeIgniter Version)

Recent Comments

hide
  • เยดดดด
  • มีตัวอย่าง CI แบบ เพียว ๆ ไหมครับ
  • ขอบคุณมากครับ เห็นแนวทางได้ชัดขึ้นจากตอนแรก ที่งงไปหมด ไม่รู้อะไรเป็นอะไร
  • ขอบคุณมากเลยครับท่าน....แหม่เพิ่มกำลังใจให้ผมได้เยอะเลย ตอนนี้กำลังฝึกงานอยู่ที่แห่งนึงในหาดใหญ่ พร้อมเด็กจากอีกสถาบันนึง 3 คน เราคิดว่าเรา…
  • Very good blog, I really like ~

Links

hide
  • OSCOOL
  • Architeture & Performance
  • Video and TV
  • Appcelerator
  • PhoneGap
  • Home
  •  » Blogs

เปลี่ยนใจใช้ Zend Cache

Apr 7, 2009 10:51:08 PM | 9 Comments | in Programing | PHP, Zend
สวัสดีช่วงนี้ มาอัพเดทถี่เลย สงสัยดีใจใกล้จะ เทศกาลสงกรานต์ เนื้อหาใน jQuery ตอนนี้มันเริ่มจะ จับฉ่ายละ 555+ ก็ทำใจหน่อยนะครับ ผมเป็นคนที่ ตอนไหนสนใจอะไร ก็จะเขียนเรื่องนั้น แต่ยังไง ก็ไม่ทิ้ง jQuery แน่ๆ น่า ไม่ต้องห่วงๆ

พอดีตอนนี้กำลังเล่น Zend Framework และได้ทีโอกาสลอง Libraries หลายๆ ตัวของ มัน โดยเมื่อวานผมได้ลองเรื่อง Cache ไป ซึ่งก่อนหน้านั้น ผมเขียน lib ชุดนี้ขึ้นใช้เองครับ โดยทำงานกับ File, APC, Memcached ซึ่งก็ไม่ได้มีปัญหาอะไร แต่ทีนี้พอได้มาลอง Zend_Cached ดู ก็ถึงกลับโละของเก่าออกเลยครับ เปลี่ยนทันที เพราะว่า lib ตัวนี้ทำงานได้ค่อนข้างละเอียด และ ยัง cache ได้หลายแบบ ดังนี้

- File
- Sqlite
- Memcached
- Apc
- Xcache
- etc.

ที่ถูกใจผมเห็นจะเป็น Sqlite นี่ล่ะครับ เพราะคิดไว้ในหัวนานแล้ว ในเมื่อ โครงสร้างของ Sqlite มันออกจะคล้ายๆ แบ่งเป็นก้อนใครก้อนมัน ก็น่าจะเอามาทำ Cache ให้กับ Client ได้ แต่ว่า ไม่มีเวลาลงมือทำเองซะที แต่ตอนนี้ ไม่ต้องละ มีคนทำให้ละ 555+

แต่ที่ผมจะมา Review เบื้องต้นในวันนี้ น่าจะเป็น Cache ในรูปแบบ File ก่อน เพราะว่า มันไม่ต้องมี Server Required อะไรเป็น พิเศษ และ Zend ก็ยังมี Parameters ที่สนับสนุน เฉพาะการ cache แบบ File มาอีกจำนวนนึง เลยเอาเป็นว่า ลองส่วนนี้กันก่อนละกัน

โดยตัวอย่างที่ผมจะเอามาทดสอบ จะเป็นการ Cache ในลักษณะ Object นะครับ เพราะว่า ส่วนของ Output ผมใช้ Cache ใน Smarty เป็นหลักอยู่แล้ว มันสะดวกดี

และการ Cache Object ส่วนมากก็จะอยู่ในลักษณะ ของการ Cache SQL Query Result แทบทั้งนั้น ดังนั้นมาเริ่มกันเลยครับ...

ก่อนอื่นก็ไป Download Zend Framework Minimal กันมาก่อน ถ้าใครยัง ไม่รู้จะไป Download ตรงไหน กลับไปอ่านของเก่าๆ กัน ที่นี่ ก่อน

การเรียกใช้งาน


<?php
require(‘Zend/Cache.php’);
$frontendOpts = array(
  ‘lifetime’ => 3600, // Expiration date is 1 hr
  ‘automatic_serialization’ => true 
);
$backendOpts = array(
  ‘cache_dir’ => ‘./tmp/’ 
);
$cache = Zend_Cache::factory(‘Core’, ‘File’, $frontendOpts, $backendOpts);
?>

ส่วนข้างบนคือการเรียก Lib -> Cache ขึ้นมาใช้ครับ ทีนี้มาดูตัวอย่างการใช้งานกัน

การ Cache

<?php
$key = 123;
if (!$result = $cache->load($key))
{
   echo "Missed Cache";
   $sql = "SELECT…….";
   $result = ::DB LOGIC::
   $cache->save($result, $key);
}
var_dump($result);
?>


นี่เป็นตัวอย่างการใช้งานครับ โดยเริ่มต้นจะพยายามทำการ fecth cache ที่มี index key เท่ากับ $key มาก่อน ถ้าไม่สามารถ ดึงข้อมูลออกมาได้ ก็จะถือว่า เป็น การ missed cached ก็จะมาทำการดึง data จาก db โดยตรง จากนั้นก็จะทำการ save กลับเข้าไปใหม่

โดยที่ data จะมี เวลาหมดอายุเท่ากับ 1 ชั่วโมงตามที่เราตั้งไว้ด้านบน

แต่ถ้าในกรณีที่เราต้องการ ให่ข้อมูลอัพเดทเป็นแบบ Real Time เราก็จะต้องทำระบบจัดการ Cache เช่น เวลาข้อมูลมีการเปลี่ยนแปลงแก้ไข ก็ให้ทำการลบ cache เลยทันทีเราจะทำแบบนี้ครับ

การลบ Cache

<?php
$cache->remove($key);
?>

นอกจากนี้การ Cache แบบไฟล์ Zend ยังเพิ่มตัวช่วยมาคือการสร้าง Tag ให้กับ Cache เพื่อให้เราสามารถกรุุ๊ป กลุ่มของ Cache ได้ แบบนี้

การใช้งานร่วมกับ Tags

<?php
$cache->save($result, $key, array(‘tag1′, tag2‘, tag3));
?>

และยังมีคำสั่งช่วยลบที่ทำงานกับ Tag โดยตรง อันนี้ผมขี้เกียจเขียนไปดูตัวอย่างของเค้าเลยน่าจะเข้าใจง่ายกว่า
Example:: Clean Data

** Tags ใช้ได้กับการ Cache แบบ Flat File เท่านั้น **

นอกจากนี้ก็ยังมีการ Cache Output ด้วย ซึ่งการใช้งานก็ไม่ได้ต่างกันมากนัก

สำหรับ Zend_Cache ตัวนี้ ถ้าเราจะเปลี่ยนไปใช้งานกับ อย่างอื่นเช่น Memcached มันก็จะมี Options เพิ่มเติมมาให้ ลองไปดูที่นี่ ครับ

ข้อแนะนำของผมเอง 
สำหรับ File Cache ด้านบนผมยังเห็นว่าถ้าจะใช้กับเวบขนาดใหญ่มัน น่าจะเกิดปัญหา ในเรื่องของ Node เต็มได้ ซึ่ง ผมจำได้ว่า UNIX มันเก็บได้ 5-6 หมื่น ไฟล์ ต่อ 1 Node ครับ ดังนั้น ควรจะใช้ Sub Folder ในการทำงาน ร่วมด้วย

และก็ถ้าจะเอาไปใช้กับ Framework ตัวอื่่นๆ ผมคิดว่า การ extends เข้าไปใช้งานน่าจะเหมาะสมกว่า ยกตัวอย่างเช่น

<?php
require_once(‘Zend/Cache.php’);
class Zcache extends Zend_Cache {
 private $_obj;
 public $cache_dir = ‘tmp’;
 public $cache_ttl = 3600;
 function __construct($dir=”, $ttl=”)
 {
    if ($dir) $this->cache_dir = $dir;
    if ($ttl) $this->cache_ttl = $ttl;
  }
 
  // Implement
}
?>

ซึ่งการทำแบบนี้ เวลาเราจะแก้ไขอะไรมันจะได้สะดวกมากขึ้นครับ วันนี้ก็ขอจบแค่นี้ สวัสดี

twitter stumbleupon delicious digg facebook

9 comments

Add comment Load previous All comments

Leave a comment

Post Comment

Powered by OSCOOL. You may view this on RSS or ATOM.

OSCOOL

  • Twitter
  • Facebook
  • Next