کش در لاراول ؛ بهینه سازی واکشی اطلاعات
کاربرد کش
کش اطلاعات با هدف کاهش زمان واکشی اطلاعات از ابزارهای ذخیره سازی مانند پایگاه داده استفاده می شود. ابزارهای مختلفی برای مدیریت کش وجود دارند که هر کدام به روشی کش اطلاعات را انجام میدهند و ابزارهای مرتبط با ویژگیها و تواناییهای مختلف ارائه می دهند. کش در لاراول هم مورد توجه قرار گرفته است و واسطهای مفیدی برای پوشاندن پیچیدگیهای کار با آن ارائه شده است.
استفاده از کش در لاراول
لاروال امکان استفاده از روشهای مختلف کش اطلاعات را پشتیبانی میکند. امکان پیکربندی ساده و سریع ساختار کش اطلاعات یکی از ویژگیهای مورد علاقه من به شخصه در انجام این تنظیمات است.
همانطور که در مستندات هم اشاره شده است، لاراول امکان کش اطلاعات در فایل تا ابزارهای اختصاصی و حرفه ای کش مانند Redis را دارد. لاراول با ارائه واسطهایی پیچیدگیهای استفاده از این فناوریها را میپوشاند.
ما در لارابوک سعی خواهیم کرد در مقالات مختلف نحوه استفاده از ابزارهای مختلف کش اطلاعات را توضیح دهیم. باید توجه داشت در زمان مناسب باید روش مناسب را انتخاب کرد. در این مقاله نگاه کوتاهی به Redis و نحوه استفاده از آن در لاراول خواهیم داشت.
Redis طبق گفته سایت رسمی آن، یک ابزار ذخیره سازی ساختارهای داده ای درون حافظه ای است. این ابزار به عنوان پایگاه داده، کش، و Message Broker استفاده می شود.
اگر کش را مانند یک جدول که اطلاعات در آن به شکل ایندکس قرارداده شده اند در نظر بگیریم امکاناتی که یک ابزار کش در نگاه اول ارائه میدهد شامل ذخیره اطلاعات در کش، به روزرسانی اطلاعات در کش، واکشی اطلاعات و بررسی وجود یا عدم وجود اطلاعات در کش است. در ادامه سادگی کار با Redis را در لاراول میبینیم.
انتخاب کش مورد استفاده برای ذخیره اطلاعات
در صورتی که از روشهای مختلف کش اطلاعات استفاده میکنید با دستورات زیر میتوانید ابزار کش اطلاعات خود را انتخاب نمایید.
1 2 3 |
$value = Cache::store(“file”)->get(“foo”); Cache::store(“redis”)->put(“bar”, “baz”, ۱۰); |
پس از انتخاب کش میتوانید دستور مورد نظر خود برای ذخیره، واکشی، بررسی وجود یا عدم وجود اطلاعات را بررسی کنید.
ذخیره اطلاعات در کش
برای ذخیره اطلاعات در کش از دستور put استفاده میکنیم. این دستور وجود اطلاعات در کش را بررسی نمیکند و آن را به عنوان یک داده جدید ذخیره میکند.
هنگام ذخیره اطلاعات باید مدت زمان ذخیره آن در کش را هم مشخص کنید. دستور put به شکل زیر استفاده می شود.
Cache::put(‘key’, ‘value’, مدت زمان نگهداری اطلاعات در کش);
مدت زمان نگهداری اطلاعات در کش را میتوان با استفاده از شی DateTime از PHP هم مشخص نمود.
1 2 3 |
$expiresAt = Carbon()::now()->addMinutes(10); Cache::put(‘key’, ‘value’, $expiresAt); |
برای بررسی وجود اطلاعات در کش پیش از ذخیره میتوان از تابع add استفاده کرد.
اگر بخواهید اطلاعات برای همیشه در کش حفظ شود میتوانید از تابع forever استفاده کنید.
1 |
Cache::forever(‘key’, ‘value’); |
بررسی وجود عنصر در کش
متد has میتواند برای بررسی وجود عنصری در کش استفاده شود. به روش زیر، به سادگی، میتوانید از این متد استفاده کنید:
1 2 3 |
If (Cache::has(‘key’)){ // } |
در صورتی که عنصری در کش موجود نباشد باید آن را به کش افزود. بررسی وجود و افزودن آن در صورت وجود نداشتن در کش را میتوان با استفاده از متد remember در یک درخواست انجام داد:
1 2 3 4 5 |
$value = Cache::remember(‘users’, $minutes, function(){ Return DB::table(‘users’)->get(); }); |
به این روش در صورت وجود نداشتن کاربرها در کش، کلوژر استفاده شده آن را واکشی کرده و به کش می افزاید.
میتوانیم این دستور را در ترکیب با forever هم استفاده کنیم. به این شکل اطلاعات کاربرها برای همیشه در کش باقی خواهند ماند.
1 2 3 4 5 |
$value = Cache::rememberForever(‘users’, function(){ return DB::table(‘users’)->get(); }); |
برای حذف یک عنصر از کش میتوانید به روش زیر از متد pull استفاده کنید. این متد پیش از حذف عنصر واکشی شده را به عنوان خروجی باز میگرداند.
1 |
$value = Cache::pull(‘key’); |
واکشی عناصر ذخیره شده در کش
متد get از فاساد Cache برای واکشی اطلاعات از کش مورد استفاده قرار میگیرد. در صورتی که عنصر در کش موجود نباشد، مقدار null بازگردانده می شود. اما روش دیگر اینست که مقدار پیش فرضی را به عنوان پارامتر دوم به متد get بفرستید.
1 2 3 |
$value = Cache::get(‘key’); $value = Cache::get(‘key’, ‘default’); |
اما گزینه های جایگزین دیگری هم وجود دارند. میتوانید با استفاده از یک کلوژر ترکیبی از واکشی اطلاعات از پایگاه داده و ذخیره آن در کش را ایجاد کنید تا در صورت پیدا نشدن عنصر مورد نظر در کش اطلاعات از پایگاه داده خوانده شوند و همزمان در کش هم ذخیره شوند.
1 2 3 4 5 |
$value = Cache::get(‘key’, function(){ return DB::table(…)->get(); }); |
پیکربندی کش
همانطور که در آغاز این مقاله هم اشاره شد، پیکربندی کش بسیار ساده است. تمامی اطلاعات پیکربندی در فایلی با عنوان config/cache.php ذخیره می شود.
یک نمونه از پیکربندی مربوط به Redis در ادامه آورده شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'redis' => [ 'cluster' => false, 'default' => [ 'host' => '127.0.0.1', 'port' => 6379, 'database' => 0, ], ], |
بنابراین میتوانید به راحتی از ابزارهای پیچیده با امکاناتی که لاراول فراهم نموده است استفاده کنید. برای استفاده از ابزارهای کش در لاراول میتوانید به روش مشابهی استفاده کنید.
لطفا نظرات خود را برای کاربردی شدن این مقاله کامنت کنید
سلام
ممنون از مطلب مفیدتون. اگه ممکنه در رابطه با همین مطلب یعنی نحوه استفاده از کش در لاراول، مطلبی در خصوص افزایش کارایی نرم افزار با استفاده از قابلیت کش اضافه کنید. مسلما چیزی که از نحوه استفاده از کش مهمتره اینه که توسعه دهنده بدونه کی، کجا و در چه مواری باید از کش در برنامه خودش استفاده کنه.
پیشاپیش از لطف شما ممنونم
موفق و پیروز باشید
سپاس از پیشنهاد خوبتون. حتما یه مقاله به این موضوع اختصاص میدیم. شما هم میتونید در صورت تمایل در مورد این موضوع مقاله بنویسید و برای ما بفرستید تا با اسم خودتون منتشر کنیم