Cara menggunakan php global cache

Sebelum membahas Laravel, mari kita belajar dahulu mengenai konsep atau definisi dari framework PHP dan arsitektur MVC. Karena Laravel merupakan sebuah framework PHP berbasisis MVC.

Apa itu framework PHP?

Framework PHP adalah suatu kerangka yang dibuat untuk membangun atau membuat sebuah aplikasi dengan menggunakan PHP sebagai bahasa pemrogramannya. Membangun sebuah aplikasi berbasis web biasanya lebih mudah dan cepat dengan menggunakan framework, karena kita tidak perlu susah-susah mendefinisikan semua fungsi-fungsi yang bersifat general, seperti koneksi ke database, template halaman web, dsb.

Apa itu MVC?

MVC adalah suatu arsitekur aplikasi dengan cara memisahkan aplikasi menjadi tiga bagian yang saling terhubung dengan sesuai dengan bagaimana informasi disajikan kepada pengguna dan didapat dari pengguna. MVC terdiri dari 3 bagian, yaitu:

Model : Adalah bagian yang memiliki fungsi-fungsi untuk mengelola database

View : adalah bagian yang bertugas menampilkan data

Controller : adalah bagian yang menjadi penghubung antara model dan view. Controller memiliki perintah-perintah yang berfungsi untuk memproses bagaimana data ditampilkan dari Model ke View, atau bagaimana data dikirimkan dari View ke Model.

Apakah ada framework PHP yang berbasis MVC selain Laravel?

Ada, seperti Codeigniter, Yii, Symfony, CakePHP, dan masih banyak lagi.

Mengapa Laravel?

Saat ini Laravel adalah salah satu framework PHP paling besar dan paling banyak digunakan di dunia. Hal ini menjadikan Laravel memiliki banyak sekali tutorial dan komunitas yang dapat membantu kita bila mengalami kesulitan dalam membangun aplikasi. Laravel juga memiliki banyak sekali third-party module yang dapat kita unduh secara gratis dan mudah.

Apa yang dibutuhkan untuk membangun sebuah aplikasi dengan Laravel?

Berikut spesifikasi server yang dibutuhkan untuk membangun sebuah aplikasi dengan menggunakan Laravel :

  1. PHP minimal versi 5.6.4
  2. OpenSSL PHP Ekstension
  3. PDO PHP Extension
  4. Mbstring PHP Ekstension
  5. Tokenizer PHP Ekstension
  6. XML PHP Ekstension

Selain versi PHP dan ekstension PHP diatas, untuk menggunakan Laravel, kita juga harus menginstall PHP Composer di server kita. Untuk lebih jelas mengenai Composer PHP silakan ikuti post mengenai Composer PHP dari link ini PHP Composer.

Install Laravel

Pertama, kita download dulu Laravel menggunakan Composer :

      1. Masuk ke terminal server
      2. Download laravel dengan menggunakan perintah *)
        Composer global require “laravel/installer”
      3. Pastikan folder $HOME/.composer/vendor/bin ada dalam variable PATH di OS.
      4. Jika sudah, ketikkan perintah
        laravel new [nama aplikasi]
        untuk menginstall Laravel. Contoh:
        laravel new blog
      5. Aplikasi laravel sudah siap digunakan.
      6. Jika menggunakan server local (WAMP, XAMPP, MAMPP), kita harus menghidupkan dulu server development laravel. Caranya dengan menggunakan perintah
        php artisan serve
        Kita bisa melihat aplikasi di alamat //localhost:8000
      7. Tampilan Laravel jika berhasil install
      8. Struktur folder dan file laravel

* perintah ini hanya dijalankan sekali untuk satu sistem.

Konfigurasi server

Public Directory

Setelah menginstall laravel, server document root/ web root kita harus mengarah ke folder public di laravel. Contoh :
DocumentRoot /var/www/blog/public
<Directory "/var/www/blog/public">
Allowoverride All

 

Directory Permission

Folder storage dan bootstrap/cache haruslah bersifat writable oleh web server agar laravel dapat berjalan.

Data caching sebenarnya berhubungan dengan penyimpanan beberapa variabel PHP dalam cache dan mengambilnya kemudian dari cache. Untuk keperluan ini, basis komponen cache CCache menyediakan dua metode yang dipakai dari waktu ke waktu: dan .

Untuk menyimpan variabel // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);2 dalam cache, kita memilih ID unik dan memanggil untuk menyimpannya:

Yii::app()->cache->set($id, $value);

Data yang ditembolok akan tetap berada dalam cache selamanya kecuali ia dihapus karena beberapa kebijakan caching (contoh, ruang cache penuh dan data terlama dihapus). Untuk mengubah perilaku umum kita juga bisa menyediakan parameter masa hidup(life-time) saat memanggil dengan demikian data akan dihapus dari cache setelah periode waktu tertentu:

// perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);

Selanjutnya, saat kita perlu mengakses variabel ini (baik dalam permintaan Web yang sama atau berbeda), kita memanggil dengan ID untuk mengambilnya dari cache. Jika nilai yang dikembalikan false, ini berarti nilai tidak tersedia dalam cache dan kita harus membuatnya kembali.

$value=Yii::app()->cache->get($id); if($value===false) { // buat ulang $value karena tidak ditemukan dalam cache // dan simpan dalam cache untuk dipakai nanti: // Yii::app()->cache->set($id,$value); }

Ketika memilih ID untuk variabel yang ditembolok, pastikan ID unik di antara semua variabel lain yang mungkin ditembolok dalam aplikasi. ID tidak perlu unik di antara berbagai aplikasi karena komponen cache cukup pintar untuk membedakan ID pada aplikasi yang berbeda.

Beberapa penyimpanan cache, seperti MemCache, APC, mendukung pengambilan beberapa nilai yang ditembolok dalam mode tumpak(batch), ini dapat mengurangi beban terkait pada pengambilan data cache. Terdapat metode bernama disediakan guna mengeksploitasi fitur ini. Dalam hal penyimpanan cache lapisan bawah tidak mendukung fitur ini, masih tetap akan mensimulasikannya.

Untuk menghapus nilai yang ditembolok dari cache, panggil ; dan untuk menghapus semuanya dari cache, panggil . Harap berhati-hati saat memanggil karena ia juga menghapus data yang ditembolok yang berasal dari aplikasi lain.

Tip: Karena CCache mengimplementasikan // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);3, komponen cache bisa dipakai layaknya sebuah. Berikut adalah beberapa contoh:

$cache=Yii::app()->cache; $cache['var1']=$value1; // sama dengan: $cache->set('var1',$value1); $value2=$cache['var2']; // sama dengan: $value2=$cache->get('var2');

1. Ketergantungan Tembolok

Selain pengaturan masa hidup, data yang ditembolok juga bisa disegarkan berdasarkan pada beberapa perubahan ketergantungan. Sebagai contoh, jika kita men-cache konten beberapa file dan file berubah, kita harus menyegarkan duplikat yang ditembolok dan membaca konten terbaru dari file alih-alih cache.

Kami menyajikan ketergantungan sebagai turunan dari CCacheDependency atau anak kelasnya. Kami mengoper turunan ketergantungan bersamaan dengan data yang ditembolok saat pemanggilan .

// nilai akan berakhir dalam 30 detik // ini juga akan disegarkan sebelumnya jika file dependen diubah Yii::app()->cache->set($id, $value, 30, new CFileCacheDependency('FileName'));

Sekarang, jika kita mengambil // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);2 dari cache dengan memanggil , ketergantungan akan dievaluasi dan jika ia berubah, kita akan mendapat nilai false yang menunjukan data perlu dibuat ulang.

Di bawah ini adalah ringkasan ketergantungan cache yang tersedia:

2. Query Caching

Mulai dari versi 1.1.7, Yii telah menambah fungsi query chacing. Query Chacing dibuat di atas data caching, digunakan untuk menyimpan hasil query DB ke dalam cache sehingga menghemat waktu eksekusi query DB jika query yang sama diminta di masa mendatang, sehingga bisa langsung diambil dari cache.

Info: Beberapa DBMS (contohnya MySQL) juga mendukung query caching pada bagian server DB. Dibandingkan dengan query caching pada bagian server, fitur yang kami dukung disini lebih fleksibel dan berpotensi untuk lebih efisien.

Mengaktifkan Query Caching

Untuk mengaktifkan query caching, pastikan

aplikasi cache yang valid (secara default ke // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);5).

Menggunakan Query Caching dengan DAO

Untuk menggunakan query caching, kita memanggil method ketika melakukan query DB. Berikut contohnya:

$sql = 'SELECT * FROM tbl_post LIMIT 20'; $dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post'); $rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();

Ketika menjalankan statement di atas, Yii pertama-tama akan mengecek cache berisi konten statement SQL yang valid untuk dieksekusi. Untuk itu dilakukan pengecekan dengan 3 keadaan;

  • Jika cache berisi sebuah entri yang diindeks oleh statement SQL.
  • Jika entri belum kadaluarsa (krang dari 1000 deik semenjak disimpan ke cache)
  • jika ketergantungannya tidak berubah (nilai maksimal // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);6 sama ketika hasil query disimpan ke cache.

Jika ketiga kondisi itu terpenuhi, maka hasil cache akan dikembalikan dari cache. Kalau tidak, maka statement SQL akan dikirim ke server DB untuk dijalankan, dan hasil bersangkutan akan disimpan ke cache.

Menggunakan Query Caching dengan ActiveRecord

Query caching dapat juga digunakan dengan Active Record. Untuk itu, kita memanggil fungsi dengan cara berikut:

$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post'); $posts = Post::model()->cache(1000, $dependency)->findAll(); // relational AR query $posts = Post::model()->cache(1000, $dependency)->with('author')->findAll();

Method // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);7 di sini secara esensinya adalah shortcut untuk . Secara internal, ketika mengeksekusi statement SQL yang dihasilkan oleh ActiveRecord, Yii akan mencoba menggunakan query caching seperti yang dijelaskan pada bagian sebelumnya.

Caching Multiple Queries

Secara default, setiap kali kita memanggil method // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);7 (baik CDbConnection ataupun CActiveRecord), akan menandai query SQL berikutnya untuk di-cache. Query SQL lainnya tidak akan di-cache sampai kita memanggil // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);7 lagi. Misalnya,

$sql = 'SELECT * FROM tbl_post LIMIT 20'; $dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post'); $rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll(); // query caching TIDAK akan digunakan $rows = Yii::app()->db->createCommand($sql)->queryAll();

Dengan menyediakan parameter ekstra $value=Yii::app()->cache->get($id); if($value===false) { // buat ulang $value karena tidak ditemukan dalam cache // dan simpan dalam cache untuk dipakai nanti: // Yii::app()->cache->set($id,$value); }0 ke method // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);7, kita memaksa multiple query untuk menggunakan query caching. Di contoh berikut, ketika kita memanggil fungsi // perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);7, kita akan menentukan query caching harus digunakan untuk 2 query berikutnya:

// ... $rows = Yii::app()->db->cache(1000, $dependency, 2)->createCommand($sql)->queryAll(); // query caching WILL be used $rows = Yii::app()->db->createCommand($sql)->queryAll();

Seperti yang diketahui, ketika melakukan query AR relasi, ada kemungkinan beberapa query SQL akan dijalankan (silahkan cek di log messages). Misalnya, untuk relasi antara $value=Yii::app()->cache->get($id); if($value===false) { // buat ulang $value karena tidak ditemukan dalam cache // dan simpan dalam cache untuk dipakai nanti: // Yii::app()->cache->set($id,$value); }3 dan $value=Yii::app()->cache->get($id); if($value===false) { // buat ulang $value karena tidak ditemukan dalam cache // dan simpan dalam cache untuk dipakai nanti: // Yii::app()->cache->set($id,$value); }4 yang $value=Yii::app()->cache->get($id); if($value===false) { // buat ulang $value karena tidak ditemukan dalam cache // dan simpan dalam cache untuk dipakai nanti: // Yii::app()->cache->set($id,$value); }5, maka code berikut akan mengeksekusi dua query:

  • Pertama select post sebanyak 20;
  • Kemudian select comment untuk post yang di-select sebelumnya.

$posts = Post::model()->with('comments')->findAll(array( 'limit'=>20, ));

Jika kita menggunakan query caching demikian, maka hanya query DB pertama yang di-cache.

// perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);0

Supaya kedua-dua query DB di-cache, kita harus memberikan parameter ekstra berapa banyak query DB yang akan di-cache berikutnya:

// perlihara nilai dalam cache paling lama 30 detik. Yii::app()->cache->set($id, $value, 30);1

Batasan

Query caching tidak bekerja pada hasil query yang mengandung pengatur resource. Misalnya, ketika menggunakan kolom jenis $value=Yii::app()->cache->get($id); if($value===false) { // buat ulang $value karena tidak ditemukan dalam cache // dan simpan dalam cache untuk dipakai nanti: // Yii::app()->cache->set($id,$value); }6 di beberapa DBMS, hasil query akan mengembalikan resource handle untuk kolom data.

Beberapa simpanan caching memiliki limitasi pada ukurannya. Misalnya, memcache membatasi ukuran setiap entri hanya 1MB. Oleh karenanya, jika ukuran query melebihi batasan ini, maka caching akan gagal.

Postingan terbaru

LIHAT SEMUA