Transient API เพื่อการ cache

จากบทความที่แล้ว ที่กล่าวถึง WP Object Cache ซึ่งยังต้องการการ install persistent cache ถ้าอยากให้ cache อยู่โดยไม่หายไป แต่หากเราอยากให้ cache อยู่ตลอด โดยไม่ต้อง install persistent cache เราสามารถใช้ Transient API ทนแทนได้

Transient API เป็น API ที่ใช้ cache object ใน WordPress เช่นเดียวกับ WP Object Cache แต่มีความสามารถพิเศษเพิ่มขึ้นคือ ถ้าเราไม่ได้ลง persistent cache ใน server พวก cache จะไปเก็บใน option table แทน กลไกการทำงานภายใน Transient API จริงๆ แล้วก็เรียกใช้ function จาก WP Object cache เพื่อจัดการ cache ในระดับล่างสุด แต่มีกลไกที่มากขึ้นในการเลือกว่าจะ cache ที่ไหน ระหว่าง persistent cache หรือ option table นั่นเอง

Transient API อาจมี function ให้เลือกใช้งานไม่เยอะเท่า WP Object Cache แต่ทำงานได้ครอบคลุมเหมือนกัน และมากกว่าด้วยซ้ำ เพราะมีคำสั่งที่ support network wide โดย function ส่วนใหญ่จะรับ parameter ดังต่อไปนี้

$transient = ชื่อ key ของ transient
$value = ค่าที่ต้องการเก็บใน transient
$expiration = เวลาที่ตั้งให้เก็บ transient ไว้ หน่วยเป็นวินาที

function ที่เรียกใช้งาน มี 2 แบบ คือ แบบที่ใช้ใน context ของ site นั้น กับ แบบที่เป็น site transient (Network Wide)

Transient ใน context ของ site

set_transient( $transient, $value, $expiration );

ใช้สำหรับ set transient key เพื่อเก็บ cache

get_transient( $transient );

ใช้สำหรับ get ค่าจาก transient ออกมา

delete_transient( $transient );

ลบค่าออกจาก transient

วิธีการใช้งาน ก็ประมาณนี้

$transient = get_transient( 'my_transient' );
if ( empty( $transient ) ){
   // we have a transient return/assign the results
   set_transient('my_transient', $transient, HOUR_IN_SECONDS );
} else {
   // Handle the false if you want
}

หากไม่ได้ install persistent cache ค่าที่เก็บจะไปอยู่ใน option table เป็น
option_name = _transient_my_transient
option_value = ค่าที่เก็บ
โดยจะเลือกเก็บใน table ของ site ที่เราทำงานด้วยอย่างถูกต้อง ถ้าทำงานกับ site_id = 2 ค่าก็จะถูกเก็บในตาราง wp_2_options

หาก install memcache ไว้ ค่า transient ก็จะถูกเก็บลง memcache (ไม่ลง option table) โดยค่าที่เก็บใน memcache เป็น
ชื่อคีย์ = blogid:transient:my_transient
value ของคีย์ = ค่าที่เก็บ

Transient ที่ใช้เป็น Network wide (ใช้งานกับ WP multisite)
การใช้ transient ในกลุ่มนี้ ควรระมัดระวังในการใช้งานเพราะจะมีผลกระทบกับ performance ของระบบ สามารถอ่านเพิ่มเติมได้ตามลิงค์
set_site_transient
get_site_transient
delete_site_transient

สามารถอ่านเพิ่มเติมเกี่ยวกับ Transient API ได้ที่ codex


Mils Burasakorn

Mils Burasakorn