Rememberable เป็นคุณลักษณะ Eloquent สำหรับ Laravel ที่เพิ่มวิธีการสืบค้น remember()
ทำให้การแคชผลลัพธ์การสืบค้นของคุณเป็นเรื่องง่ายมากตามระยะเวลาที่ปรับได้
// Get a the first user's posts and remember them for a day.
User:: first ()-> remember ( now ()-> addDay ())-> posts ()-> get ();
// You can also pass the number of seconds if you like (before Laravel 5.8 this will be interpreted as minutes).
User:: first ()-> remember ( 60 * 60 * 24 )-> posts ()-> get ();
ทำงานโดยเพียงแค่จดจำแบบสอบถาม SQL ที่ใช้และจัดเก็บผลลัพธ์ หากมีการพยายามค้นหาแบบเดียวกันในขณะที่แคชยังคงอยู่ ระบบจะดึงข้อมูลจากร้านค้าแทนที่จะไปที่ฐานข้อมูลของคุณอีกครั้ง
ติดตั้งโดยใช้ Composer เช่นเดียวกับที่คุณทำอย่างอื่น
composer require watson/rememberable
วิธีที่ง่ายที่สุดในการเริ่มต้นใช้งาน Eloquent คือการสร้าง AppModel
แบบนามธรรมซึ่งคุณสามารถขยายโมเดลแอปพลิเคชันของคุณได้ ในโมเดลพื้นฐานนี้ คุณสามารถนำเข้าลักษณะที่จดจำได้ ซึ่งจะขยายฟังก์ชันการแคชเดียวกันนี้ไปยังคำค้นหาใดๆ ที่คุณสร้างจากโมเดลของคุณ
<?php
namespace App ;
use Watson Rememberable Rememberable ;
use Illuminate Database Eloquent Model as Eloquent ;
abstract class Model extends Eloquent
{
use Rememberable;
}
ตอนนี้ เพียงตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณโมเดลจาก AppModel
ใหม่นี้ แทนที่จะเป็น Eloquent
<?php
namespace App ;
class Post extends Model
{
//
}
หรือคุณสามารถใช้คุณลักษณะกับแต่ละโมเดลที่คุณต้องการใช้ remember()
ได้
การใช้วิธีจำนั้นง่ายมาก เพียงส่งผ่านจำนวนวินาทีที่คุณต้องการจัดเก็บผลลัพธ์ของการสืบค้นนั้นในแคช และเมื่อใดก็ตามที่มีการเรียกการสืบค้นเดียวกันภายในกรอบเวลานั้น ผลลัพธ์จะถูกดึงออกจากแคช แทนที่จะดึงจากฐานข้อมูลอีกครั้ง
// Remember the number of users for an hour.
$ users = User:: remember ( 60 * 60 )-> count ();
หากคุณต้องการแท็กคำค้นหาบางคำ คุณสามารถเพิ่ม cacheTags('tag_name')
ลงในคำค้นหาของคุณได้ โปรดสังเกตว่าแท็กแคชไม่ได้รับการสนับสนุนโดยไดรเวอร์แคชทั้งหมด
// Remember the number of users for an hour and tag it with 'user_queries'
User:: remember ( 60 * 60 )-> cacheTags ( ' user_queries ' )-> count ();
หากคุณต้องการเพิ่มคำนำหน้าที่ไม่ซ้ำกันลงในคีย์แคชสำหรับการสืบค้นแต่ละรายการของคุณ (เช่น หากแคชของคุณไม่รองรับการแท็ก) คุณสามารถเพิ่ม prefix('prefix')
ให้กับการสืบค้นของคุณได้
// Remember the number of users for an hour and prefix the key with 'users'
User:: remember ( 60 * 60 )-> prefix ( ' users ' )-> count ();
หรือคุณสามารถเพิ่มคุณสมบัติ $rememberCachePrefix
ให้กับโมเดลของคุณเพื่อใช้คำนำหน้าแคชนั้นเสมอ
หากคุณต้องการใช้ไดรเวอร์แคชแบบกำหนดเอง (กำหนดใน config/cache.php) คุณสามารถเพิ่ม cacheDriver('cacheDriver')
ลงในแบบสอบถามของคุณได้
// Remember the number of users for an hour using redis as cache driver
User:: remember ( 60 * 60 )-> cacheDriver ( ' redis ' )-> count ();
หรือคุณสามารถเพิ่มคุณสมบัติ $rememberCacheDriver
ให้กับโมเดลของคุณเพื่อใช้ไดรเวอร์แคชนั้นเสมอ
คุณสามารถตั้งค่าแท็กแคชสำหรับการสืบค้นทั้งหมดของโมเดลโดยการตั้งค่าคุณสมบัติ $rememberCacheTag
ด้วยสตริงเฉพาะที่ควรใช้ในการแท็กการสืบค้น
การตรวจสอบการทำงานโดยการแคชแบบสอบถามแบบสืบค้นต่อแบบสอบถาม ซึ่งหมายความว่าเมื่อคุณดำเนินการโหลดการสืบค้นเพิ่มเติมเหล่านั้นอย่างกระตือรือร้นจะไม่ถูกแคชเช่นกัน เว้นแต่จะระบุไว้อย่างชัดเจน คุณสามารถทำได้โดยใช้การโทรกลับพร้อมกับความกระตือรือร้นของคุณ
$ users = User:: where ( " id " , " > " , " 1 " )
-> with ([ ' posts ' => function ( $ q ) { $ q -> remember ( 60 * 60 ); }])
-> remember ( 60 * 60 )
-> take ( 5 )
-> get ();
คุณสามารถเลือกที่จะแคชคำค้นหาทั้งหมดของโมเดลได้โดยการตั้งค่าคุณสมบัติ $rememberFor
ด้วยจำนวนวินาทีที่คุณต้องการแคชผลลัพธ์ ใช้ฟีเจอร์นี้ด้วยความระมัดระวัง เนื่องจากอาจทำให้เกิดการทำงานที่ไม่คาดคิดและข้อมูลเก่าในแอปของคุณ หากคุณไม่คุ้นเคยกับวิธีการทำงาน
ขึ้นอยู่กับสถาปัตยกรรมของแพ็คเกจ จึงไม่สามารถลบแคชสำหรับแบบสอบถามเดียวได้ แต่หากคุณแท็กคำค้นหาใดๆ โดยใช้แท็กแคช คุณจะสามารถล้างแคชสำหรับแท็กได้:
User:: flushCache ( ' user_queries ' );
หากคุณใช้คุณสมบัติ $rememberCacheTag
คุณสามารถใช้เมธอดได้โดยไม่ต้องมีพารามิเตอร์ และแคชสำหรับแท็กที่ตั้งค่าโดย $rememberCacheTag
จะถูกล้าง:
User:: flushCache ();
หากคุณต้องการปิดการใช้งานแคชสำหรับการสืบค้นเฉพาะ คุณสามารถใช้เมธอด dontRemember
:
User:: latest ()-> dontRemember ()-> get ();