در حال بارگزاری ...

پیاده سازی کش در لاراول

توسط مریم مهربان
آخرین به روز رسانی پنجشنبه 30 آبان 1398

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

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


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

پیش نیازها

به عنوان پیش نیاز، تکنولوژی‌های زیر باید روی سیستم شما نصب باشند (نسخه‌های ذکر شده، نسخه مورد استفاده ما است):

  • Laravel 5.5
  • PHP 7.1
  • MySQL

ابزار کش در لاراول

لاراول، یک راه بهینه و موثر برای کش کردن ارائه می‌کند که تنظیمات آن در فولدر config/cache.php قرار دارد. در این فایل، شما باید درایو کش پیش‌فرض خود را مشخص کنید. از جمله بخش‌هایی که می‌توان برای آن‌ها کش ایجاد کرد، عبارتند از:

  1. Memcached
  2. Redis
  3. Database
  4. File
  5. Array

برای تغییر درایور کش خود، فایل .env را باز کنید و مقدار متغیر Cache_Drive=file را ویرایش کنید.

استفاده از کش لاراول

برای فعال سازی کش در لاراول، ابتدا باید با استفاده از Illuminate\Contracts\Cache\Factory و Illuminate\Contracts\Cache\Repository، باید به سرویس‌های کش لاراول دست پیدا کرد.

Factory contract، امکان دسترسی به همه درایورهای کش برنامه کاربردی شما را امکان پذیر می‌کند و Repository contract ، درایور کش پیش‌فرض برنامه کاربردی شما را پیاده سازی می‌کند.

برای ایجاد، حذف و تغییر مقادیر در کش، می‌توان از توابع لاراول زیر استفاده کرد:

Cache::Put()

Cache::Get()

Cache::Forever()

Cache::Has()

ذخیره در حافظه کش

Cache::Put()، برای کش کردن داده‌های برنامه کاربردی استفاده می‌شود. این تابع، داده‌ها را در قالب سه پارامتر کلید، مقدار و زمان به واحد دقیقه می‌گیرد و ذخیره می‌کند. کلیدها در کش، یک شناسه منحصر به فرد هستند که برای بازیابی داده مورد استفاده قرار می‌گیرند.

Cache ::put(key, value , 15);

برای به روزرسانی خودکار داده‌های کش، می‌توانید از تابع remember() استفاده کنید. این تابع، مقدار را می‌گیرد و اگر موفق به یافتن این مقدار شود، کلید متناظر با آن را بازمی‌گرداند. در غیر این صورت، یک کلید جدید با این مقدار در کش ایجاد می‌کند.

Cache::remember('articles', 15, function() {
    return Article::all();
});

مقدار “15” مدت زمانی (به واحد دقیقه) است که این مقادیر باید در حافظه کش نگهداری شوند.

بازیابی از کش

اگر قصد دارید داده‌ای را از کش بازیابی کنید، می‌توانید از تابع Get() استفاده کنید.

Route::get('/', function()
{
  return Cache::get( 'key' );
});

افزودن یا کاستن از مقادیر درون کش

برای تغییر مقادیر عدد صحیحی که در کش ذخیره کردید، می‌توانید از توابع increment() و decrease() استفاده کنید. این دو تابع یک پارامتر ورودی اختیاری دارند که به مقداری که باید به مقدار پیشین اضافه شود یا از آن کاسته شود، اشاره می‌کند.

Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);

بررسی وجود یا عدم وجود مقادیر درون کش

اگر می‌خواهید پیش از بازیابی داده، بررسی کنید که آیا کلیدی در کش وجود دارد یا خیر، از تابع Has() استفاده کنید:

Route::get('/', function()
{
   if (Cache::has('key')){
      Cache::get('key');
   } else {
      Cache::put('key', $values, 20);
   }});

حذف مقدار از کش

برای پاک کردن کش در لاراول، مانند زیر تابع forget() را با کلید موردنظر فراخوانی کنید:

Cache::forget('key');

همچنین، می‌توانید آن را مقدار را بازیابی کنید و سپس آن را پاک کنید. به این منظور، تابع pull() علاوه بر حذف مقادیر موردنظر، آن را به شما بازمی‌گرداند.

$articles = Cache::pull('key');

این امکان هم وجود دارد که کش لاراول را پیش ار انقضای آن، از طریق کنسول حذف کنید:

php artisan cache:clear

پاک کردن کش مسیر

برای پاک کردن کش مسیرها در برنامه‌های کاربردی لاراول، می‌توانید دستور زیر را در ترمینال وارد کنید:

php artisan route:cache

پاک کردن پیکربندی کش

برای پاک کردن پیکربندی کش برنامه‌های کاربردی لاراول، دستور زیر را وارد کنید:

php artisan config:cache

پاک کردن فایل های view کامپایل شده

برای پاک کردن فایل‌های view، دستور زیر را در ترمینال وارد کنید:

php artisan view:clear

کش پایگاه داده

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

Schema::create('cache', function ($table) {
   $table->string('key')->unique();
   $table->text('value');
   $table->integer('expiration');
});

CloudWays

Cloudways، یک پلتفرم مدیریت شده برای میزبانی وب سایت‌ها است که این امکان را به شما می‌دهد که تنها با یک کلیک به لاراول و سایر پکیجها دسترسی داشته باشید. شما می‌توانید لاراول و برخی از ابزارهای پیکربندی کش را با یک کلیک نصب کنید. علاوه بر این، cloudways یک پشته بهینه از ابزارها شامل Nginx ،laravel ،varnish ،Memcached ،Apache Http accelator ،PHP 7.x، MySQL 5.5 و بسیاری دیگر را ارائه می‌کند که در بهینه سازی کارآیی برنامه کاربردی بسیار کمک کننده است. شما نیز می‌توانید اسکریپت‌های پیشرفته را بدون هیچ پیکربندی خارجی به برنامه کاربردی خود اضافه کنید (مانند Redis cache, Elasticsearch  و غیره).

استفاده از کش لاراول در cloudways

 برای پیاده سازی کش در لاراول و مشاهده میزان تاثیر آن در کارآیی برنامه کاربردی، ابتدا لازم است یک برنامه کاربردی جدید تحت لاراول نصب کنید. برای توسعه برنامه کاربردی خود، می‌توانید سرور ابری موردنظر خود را از میان گزینه‌هایی همچون AWS ،Digital Ocean Linode و Vultr انتخاب کنید.

انتخاب سرور ابری از cloudways

در ادامه، نحوه پیاده سازی کش لاراول را در سرور ابری Digital Ocean دنبال می‌کنیم.

ایجاد Model و Migration

پس از نصب برنامه کاربردی لاراول، با کد زیر می‌توانید model و migration را ایجاد کنید:

php artisan make:model Employee-m

 

ایجاد مدل در لاراول

سپس فولدر migration را باز کنید و در فایل employee migration، کد زیر را بنویسید:

public function up() {
    Schema::create('articles', function (Blueprint $table) {
        $table->increments('id');
        $table->string("emp_name");
        $table->string("emp_details");
        $table->timestamps();
  });
}

پس از تنظیم فیلدهای جدول Employee، می‌توانید دستور migration را شبیه زیر اجرا کنید:

PHP artisan migrate

ایجاد migrate در لاراول

مدیریت جداول در cloudways

داده ریزی (Seeding) پایگاه داده

قدم بعد، پر کردن جدول “articles” است. به این منظور، فایل database/seeds/DatabaseSeeder.php را باز کنید و کد مربوط به تابع Run() را به روزرسانی کنید. در کد زیر، از کتابخانه Faker ، برای ایجاد داده‌های جعلی به منظور تست استفاده شده است. از تابع range() در PHP، هم برای ایجاد 30 رکورد داده استفاده شده است.

    <?php
    use Illuminate\Database\Seeder;
    use Illuminate\Support\Facades\DB;
    use App\Employee;
    use Faker\Factory as Faker;
class DatabaseSeeder extends Seeder
{
       /**
        * Seed the application's database.
        *
        * @return void
        */
       public function run()
       {
       $faker = Faker::create();
       foreach(range(1, 30) as $index) {
           Employee::create([
               'emp_name' => $faker->sentence(5),
               'emp_deatils' => $faker->paragraph(6)
           ]);
       }
       }
    }

در نهایت، برای مقداردهی جدول با مقادیر تست ایجاد شده، کد زیر را اجرا کنید:

Php artisan db:seed

داده ریزی در لاراول

این داده‌ها را می‌توانید از طریق Cloudways database manager مشاهده کنید:

جدول Employee با داده های جعلی

کنترلر

برای ایجاد یک کنترلر که درخواست‌ها را پردازش کند و متناسب با نیازمندی‌های شما، آن را کش کند، می‌توانید از دستور زیر استفاده کنید:

php artisan make:controller EmployeeController

ایجاد کنترلر در لاراول

مسیر

برای ایجاد مسیر نیز می‌توانید در فایل app/Http/routes.php، یک مسیر اضافه کنید که به تابع index کنترلر اشاره می‌کند:

Route::group(['prefix' => 'api'], function() {
    Route::get('employee', 'EmployeeController@index');
});

تست لاراول بدون کش

برای مشاهده تاثیر پیاده سازی کش در لاراول، بهتر است ابتدا آن را بدون کش، با استفاده از POSTMAN امتحان کنید.

فایل Employeecontroller را باز کنید و کد زیر را در تابع index() بنویسید:

    <?php
    namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    use App\Employee;
    class EmployeeController extends Controller
    {
       //
    public function index() {
       $employee= Employee::all();
    //dd($employee);
       return response()->json($employee);
    }
    }

تست لاراول بدون کش

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

تست لاراول با کش

در این بخش، باید کش را برای لاراول یکپارچه کنید و به این منظور، باید کد تابع index() را جایگزین کنید. با فرض اینکه کش را برای فایل انتخاب کردید ( Cache_Drive=File )، مدت زمان تکمیل درخواست طبق عکس زیر، تقریبا 284 میلی ثانیه است.

تست لاراول با کش

Redis

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

Redis در cloudways

برای یکپارچه کردن Redis با لاراول، ابتدا باید دستور predis را در برنامه کاربردی لاراول خود اجرا کنید. سپس فایل database.php را باز کنید و تنظیمات را براساس پیکربندی Redis تغییر دهید.

پس از آن، فایل config/cache.php را باز کنید و مقدار پیش‌فرض connection=>cache to connection را به Redis تغییر دهید. 

دستور predis

افزایش سرعت وبسایت

برای تغییر درایور کش به memchached، در فایل .env ، نوع درایور را از Redis به memcached تغییر دهید.

Varnish در لاراول

Varnish، یک ابزار پراکسی معکوس برای کش کردن پیام‌های HTTP است. این ابزار، به جای وب سرور به درخواست‌های HTTP گوش می‌دهد و پس از دریافت درخواستی، آن را به وب سرور ارسال می‌کند. وب سرور، پس از پردازش درخواست و آماده کردن پاسخ، آن را به پراکسی varnish ارسال می‌کند و varnish پاسخ را کش می‌کند و همچنین به کاربر ارسال می‌کند.

بنابراین، مرتبه‌های بعدی که درخواست مشابهی ارسال می‌شود، varnish به سادگی می‌تواند از پاسخ‌هایی که اخیرا کش شده استفاده کند و درگیر نیازی به انجام پروسه ارسال درخواست به وب سرور و انتظار برای دریافت پاسخ نیست.

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

امیدواریم که با این آموزش‌ها، شما را در داشتن یک برنامه کاربردی بهینه‌تر یاری رسانده باشیم. منتظر آموزش‌های بعدی ما در لیداوب باشید.

دیدگاه ها

دیدگاه ها : 0


متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

رایگان

اشتراک گذاری در
ثبت امتیاز
4 (3 رای)

   لطفا صبر کنید ...