وبلاگ

کش کردن کوئری‌های الوکوئنت در لاراول


رقیه اباذری رقیه اباذری

وقتی صحبت از سرعت سایت و اپلیکیشن می‌شود، کش می‌تواند بهترین گزینه باشد. کش کردن تاثیر زیادی در سرعت سایت دارد. خوشبختانه لاراول به صورت از پیش نصب شده درایورهای کش دارد که بدون هیچ زحمتی می‌توانید از آنها استفاده کرده و سرعت سایت را بهبود ببخشید. Redis و Memcached یا تنها استفاده از فایل‌های لوکال، لاراول همه اینها را دارد.

در این مقاله پیاده سازی کش برای کوئری‌های الوکوئنت به صورت مستقیم از لاراول را بررسی می‌کنیم، که کش در دیتابیس را ساده می‌سازد.

نصب و راه اندازی 

پکیج را می‌توانید از طریق کامپوزر نصب کنید:

composer require rennokki/laravel-eloquent-query-cache

مدل‌های شما به تریت QueryCacheable نیاز دارند:

use Rennokki\QueryCache\Traits\QueryCacheable;
class Article extends Model
{
    use QueryCacheable;
    ...
}

کش را به صورت پیش فرض فعال کنید

پکیج به صورت پیش فرض کش را فعال نمی‌کند. پراپرتی cacheFor$ را به مدل اضافه کنید:

use Rennokki\QueryCache\Traits\QueryCacheable;
class Article extends Model
{
    use QueryCacheable;
    protected $cacheFor = 180; // 3 minutes
}

هر وقت که یک کوئری اجرا شود، کش وارد عمل می‌شود. در صورت خالی بودن کش برای آن کوئری، آن را ذخیره می‌کند و دفعه بعد آن را از کوئری دیتابیس که کش شده، بازیابی می‌کند.

در صورت وجود داشتن آن را بازیابی کرده و به کار می‌گیرد. این عمل را بدون اینکه با دیتابیس کاری داشته باشد انجام می‌دهد.

// database hit; the query result was stored in the cache
Article::latest()->get();
// database was not hit; the query result was retrieved from the cache
Article::latest()->get();

چنانچه می‌خواهید از استفاده از کش جلوگیری کنید، از متد ()dontCache-> قبل از تریگر کردن متد آخر استفاده کنید.

Article::latest()->dontCache()->firstOrFail();

فعال کردن کش به صورت کوئری به کوئری

اگر فعال کردن کش به صورت پیش‌فرض، راه حل مناسبی برای شما نیست، روشی جایگزین را انتخاب کنید. فعال کردن کش به صورت کوئری به کوئری یعنی هر بار که کوئری می‌نویسد باید آن را کش کنید که در مقابل روش اول یعنی کش کردن تمامی کوئری‌های مدل است.

اول از همه، متغیر cacheFor$ را از مدل حذف کنید. در هر کوئری با فراخونی (...)cacheFor->  مشخص می‌کنید که قصد کش کردن آن کوئری را دارید.

Article::cacheFor(now()->addHours(24))->paginate(15);

با تگ‌ها بهتر سازماندهی کنید

بعضی از ذخیره سازهای کش مثل Redis یا Memcached از تگ زدن کلیدها پشتیبانی می‌کنند. این ویژگی از این منظر خیلی مفید است که کوئری کش شده را تگ می‌زنیم و هر وقت که بخواهیم کش مورد نظرمان را غیرفعال می‌کنیم. 

به عنوان مثال ساده، اگر بخواهیم با آپدیت کردن یک مقاله، کش لیست مقاله‌ها را پاک کنیم، استفاده از تگ روش کارآمدی است.

$articles = Article::cacheFor(60)->cacheTags(['latest:articles'])->latest()->get();
$article = Article::find($id);
$article->update(['title' => 'My new title']);
Article::flushQueryCache(['latest:articles']);

متد flushQueryCache فقط کش تگ شده با latest:articles را پاک می0157کند. اگر کوئری‌های دیگر با تگی به جز latest:articles تگ شده باشند در کش نگه داشته می‌شوند.

 

 

 

 

 

 

 

 


برچسب‌ها: لاراول

رقیه اباذری
رقیه اباذری

مطالب مرتبط


اکسپورت دیتا در اکسل و CSV در لاراول 6 به همراه مثال

در این آموزش، نحوه اکسپورت داده‌های اکسل و CSV با استفاده از پکیج maatwebsite/excel را بررسی می‌کنیم. پکیج Laravel Excel یک ورژن PhpSpreadsheet متناسب سازی شده با لاراول است

آموزش ساخت سایت چندزبانه با استفاده از قابلیت محلی سازی در لاراول

قابلیت محلی سازی لاراول روش مناسبی برای بازیابی استرینگ‌ها به زبان‌های مختلف را برای ما فراهم می‌کند. در واقع با استفاده از این قابلیت است که می‌توانیم با کمترین اتلاف وقت، از چند زبان در وب سایت خود پشتیبانی کنیم.

متدهای firstOrNew و firstOrCreate و firstOr و updateOrCreate در لاراول

متدهای firstOrNew و firstOrCreate و firstOr و updateOrCreate در لاراول برای آپدیت و ساخت مدل‌ها استفاده می‌شوند.