Rememberable adalah sifat Eloquent untuk Laravel yang menambahkan metode query remember()
. Ini membuatnya sangat mudah untuk menyimpan hasil kueri Anda dalam cache untuk jangka waktu yang dapat disesuaikan.
// 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 ();
Ia bekerja hanya dengan mengingat query SQL yang digunakan dan menyimpan hasilnya. Jika kueri yang sama dicoba saat cache masih ada, kueri tersebut akan diambil dari penyimpanan alih-alih mengenai database Anda lagi.
Instal menggunakan Komposer, sama seperti yang Anda lakukan lainnya.
composer require watson/rememberable
Cara termudah untuk memulai Eloquent adalah dengan membuat AppModel
abstrak yang dapat digunakan untuk memperluas model aplikasi Anda. Dalam model dasar ini Anda dapat mengimpor sifat yang dapat diingat yang akan memperluas fungsionalitas cache yang sama ke setiap kueri yang Anda buat dari model Anda.
<?php
namespace App ;
use Watson Rememberable Rememberable ;
use Illuminate Database Eloquent Model as Eloquent ;
abstract class Model extends Eloquent
{
use Rememberable;
}
Sekarang, pastikan saja model aplikasi Anda dari AppModel
baru ini, bukan Eloquent.
<?php
namespace App ;
class Post extends Model
{
//
}
Alternatifnya, Anda cukup menerapkan sifat tersebut ke setiap model yang ingin Anda gunakan remember()
.
Menggunakan metode ingat sangat sederhana. Lewatkan saja jumlah detik yang Anda inginkan untuk menyimpan hasil kueri tersebut di cache, dan setiap kali kueri yang sama dipanggil dalam jangka waktu tersebut, hasilnya akan diambil dari cache, bukan dari database lagi.
// Remember the number of users for an hour.
$ users = User:: remember ( 60 * 60 )-> count ();
Jika Anda ingin memberi tag pada kueri tertentu, Anda dapat menambahkan cacheTags('tag_name')
ke kueri Anda. Harap perhatikan bahwa tag cache tidak didukung oleh semua driver cache.
// Remember the number of users for an hour and tag it with 'user_queries'
User:: remember ( 60 * 60 )-> cacheTags ( ' user_queries ' )-> count ();
Jika Anda ingin awalan unik ditambahkan ke kunci cache untuk setiap kueri Anda (misalnya, jika cache Anda tidak mendukung pemberian tag), Anda dapat menambahkan prefix('prefix')
ke kueri Anda.
// Remember the number of users for an hour and prefix the key with 'users'
User:: remember ( 60 * 60 )-> prefix ( ' users ' )-> count ();
Alternatifnya, Anda dapat menambahkan properti $rememberCachePrefix
ke model Anda untuk selalu menggunakan awalan cache tersebut.
Jika Anda ingin menggunakan driver cache khusus (didefinisikan dalam config/cache.php), Anda dapat menambahkan cacheDriver('cacheDriver')
ke kueri Anda.
// Remember the number of users for an hour using redis as cache driver
User:: remember ( 60 * 60 )-> cacheDriver ( ' redis ' )-> count ();
Alternatifnya, Anda dapat menambahkan properti $rememberCacheDriver
ke model Anda untuk selalu menggunakan driver cache tersebut.
Anda dapat menyetel tag cache untuk semua kueri model dengan menyetel properti $rememberCacheTag
dengan string unik yang harus digunakan untuk menandai kueri.
Validasi berfungsi dengan menyimpan kueri dalam cache berdasarkan kueri demi kueri. Ini berarti bahwa ketika Anda melakukan pemuatan cepat, kueri tambahan tersebut tidak akan di-cache juga kecuali ditentukan secara eksplisit. Anda dapat melakukannya dengan menggunakan panggilan balik dengan keinginan Anda.
$ users = User:: where ( " id " , " > " , " 1 " )
-> with ([ ' posts ' => function ( $ q ) { $ q -> remember ( 60 * 60 ); }])
-> remember ( 60 * 60 )
-> take ( 5 )
-> get ();
Anda dapat ikut serta dalam cache semua kueri model dengan mengatur properti $rememberFor
dengan jumlah detik hasil yang ingin Anda cache. Gunakan fitur ini dengan hati-hati karena dapat menyebabkan perilaku tidak terduga dan data usang di aplikasi Anda jika Anda tidak memahami cara kerjanya.
Berdasarkan arsitektur paket, tidak mungkin menghapus cache untuk satu permintaan. Namun jika Anda menandai kueri apa pun menggunakan tag cache, Anda dapat mengosongkan cache untuk tag tersebut:
User:: flushCache ( ' user_queries ' );
Jika Anda menggunakan properti $rememberCacheTag
Anda dapat menggunakan metode ini tanpa parameter dan cache untuk tag yang disetel oleh $rememberCacheTag
akan dihapus:
User:: flushCache ();
Jika Anda perlu menonaktifkan cache untuk kueri tertentu, Anda dapat menggunakan metode dontRemember
:
User:: latest ()-> dontRemember ()-> get ();