ฉันเคยviews_get_view_result()
ได้รับผลจากการดูเพราะมันสะดวกในเวลานั้น ผลแบบสอบถามไม่ค่อยเปลี่ยนแปลง; ฉันสามารถใช้การดูแคชเป็นเวลา 6 วัน
หากฉันต้องการแปลงเป็นการโทรเป็นdb_query()
ฉันจะเปิดใช้งานการแคชได้อย่างไร
ฉันเคยviews_get_view_result()
ได้รับผลจากการดูเพราะมันสะดวกในเวลานั้น ผลแบบสอบถามไม่ค่อยเปลี่ยนแปลง; ฉันสามารถใช้การดูแคชเป็นเวลา 6 วัน
หากฉันต้องการแปลงเป็นการโทรเป็นdb_query()
ฉันจะเปิดใช้งานการแคชได้อย่างไร
คำตอบ:
ห้ามใช้การแคชหากคุณใช้มุมมองหรือ db_query () การแคชจะทำงานเหมือนกันทุกครั้งวิธีดึงข้อมูลเมื่อแคชหายไปนั้นขึ้นอยู่กับคุณ
หากต้องการดูตัวอย่างบางอย่างที่คุณสามารถดูฟังก์ชั่นการใช้งานที่ cache_get ()ตัวอย่างเช่นvariable_initialize ()
หากฟังก์ชั่นของคุณเรียกว่าหลายครั้งแล้วคุณอาจต้องการที่จะรวมกับแคชคงดูตัวอย่างarchiver_get_info () และหากการสร้างข้อมูลใหม่ช้าจริง ๆ คุณสามารถป้องกันไม่ให้เกิดขึ้นหลายครั้งโดยใช้กรอบการล็อคเช่นเดียวกับ variable_initialize ()
โปรดทราบว่าการแคชเคียวรีเดียวนั้นสมเหตุสมผลถ้าเป็นคิวที่ช้าเพราะ cache_get () เป็นคิวรี db ด้วยเช่นกันเว้นแต่คุณจะใช้แบ็กเอนด์แคชสำรองเช่น Memcache
และสุดท้ายมุมมองมีการแคชแล้วในตัวและสามารถกำหนดค่าในมุมมองของคุณ นั่นอาจเป็นตัวเลือกเช่นกัน
db_query()
และต้องทำการแคชค่าจาก$results->fetchAll()
และไม่ใช่$results
กุญแจสำคัญที่จะทำให้มันใช้งานได้จริง
ฉันไม่คิดว่าเลเยอร์ DB มีกลไกการแคชใด ๆ (แม้ว่าฉันอาจผิด) แต่คุณสามารถใช้ API แคชเริ่มต้นได้
นี่เป็นเพียงตัวอย่างพื้นฐานที่จะแคชผลลัพธ์ของแบบสอบถามเพื่อรับโหนดประเภทที่แน่นอน:
function MYMODULE_get_nodes_by_type($type) {
// Setup a cache ID
$cid = 'MYMODULE:node_types:' . $type;
// If a cached entry exists, return it
if ($cached = cache_get($cid)) {
return $cached->data;
}
// Otherwise load the data
$data = db_query('SELECT * FROM {node} WHERE type = :type', array(':type' => $type))->fetchAll();
// And cache it
cache_set($cid, $data, 'cache', strtotime('+6 days'));
}
นอกเหนือจากกลไกมาตรฐานcache_set / cache_getที่ Drupal ให้ไว้หากคุณใช้ MySQL เป็นฐานข้อมูลของคุณคุณสามารถเปิดใช้งานแคชแบบสอบถามซึ่งสามารถแคชผลลัพธ์ของมุมมองหรือแบบสอบถามฐานข้อมูลอื่น ๆ ได้อย่างโปร่งใส mysqltunerสามารถช่วยในการหาค่าที่ดีสำหรับขนาดแคช
เพียงสังเกตว่าถ้าคุณกำลังเขียนจำนวนมากไปยังฐานข้อมูลการแคชแบบสอบถามจะมีประสิทธิภาพน้อยลงเนื่องจากวิธีการที่กลยุทธ์การตรวจสอบแคชทำงาน (การเขียนลงในตารางจะทำให้รายการทั้งหมดที่เลือกจากหรือเข้าร่วมตารางนั้นไม่ถูกต้อง
นอกจากนี้ยังมีกลไกการแคชสำหรับ PostgreSQLแต่ฉันไม่มีประสบการณ์โดยตรงกับมัน
ฉันเพิ่งค้นพบโมดูลการดำเนินการแคช ด้วยโมดูลนี้คุณสามารถตั้งค่าแคชมุมมองเป็นแคชที่เรียกใช้กฎและสร้างกฎสำหรับการทำให้แคชใช้ไม่ได้ในมุมมองและมุมมองที่ระบุ
ตัวอย่างเช่นแคชสำหรับมุมมองที่แสดงรายการโหนดของชนิดเนื้อหาที่เฉพาะเจาะจงสามารถถูกทำให้ว่างเปล่าเมื่อสร้างโหนดใหม่ของประเภทเนื้อหานั้น