Tìm hiểu Caching trong Laravel 5
Bài đăng này đã không được cập nhật trong 3 năm
Chào các bạn, Hôm nay chúng ta cùng nhau tìm hiểu caching trong laravel 5 nhé!! I/ Hướng dẫn cấu hình Cache trong Laravel 5.x
- Trong laravel muốn config cache để caching data thì chúng ta thao tác với file
config/cache.php
. Khi mở file này chúng ta thấy ngay tại khóa store sẽ có các driver cho chúng ta lựa chọn:
'stores' => [
'apc' => [ ... ],
'array' => [ ... ],
'database' => [ ... ],
'file' => [ ... ],
'memcached' => [ ... ],
'redis' => [ ... ],
]
Để đảm bảo Driver luôn đúng thì bạn có thể set giá trị cho Driver của Caching trong biến môi trường .env
. Set như sau
CACHE_DRIVER=file
II/ Tìm hiểu Cache
Facade trong Laravel
- Khi làm việc với cache hầu hết chúng ta thao tác với Cache Facade. Vậy Cache Facade có những gì
- trong đó ??
- Cache Facade chưa nhiều static method, chẳng hạn: create, update, delete, get và kiểm tra sự tồn tại của cache (hay chính xác hơn là dữ liệu đã caching). Để các bạn hiểu hơn về các method này thì chúng ta cùng tìm hiểu nhé
- Create và Update giá trị cache
- Để add/update một giá trị cần caching thì chúng ta sử dụng method
put
. Method này cần có 3 đối số:
- Đối số thứ nhất:
key
- Đối số thứ 2:
value
- Đối số thứ 3:
expiration time
, tính bằng phút - Lưu ý:
key
là định danh mang tính chất unique. Nên lưu ý không đặt trùng key khi caching Ví dụ:
Cache::put('key', 'value', 10);
Mở rộng hơn, chúng ta có thể sử dụng method remember
để tự động lấy và cập nhật giá caching. Đầu tiên, method này sẽ check key
, nếu key
đã được lưu thì sẽ lấy giá trị của key
này. Nếu key
chưa có thì tạo key
với giá trị được định nghĩa trong closure function. Ví dụ:
Cache::remember('articles', 15, function() {
return Article::all();
});
- Lấy giá trị cache
- Để lấy được giá caching, thì chúng ta sử dụng method
get
. Method cần một đối số làkey
(Key đã được set ở phần 1) - Ví dụ:
Cache::get('key');
- Kiểm tra sự tồn tại của caching
- Đôi khi chúng ta cần kiểm tra sự tồn tại của cache trước khi update hay là get giá trị caching để tránh bị lỗi. Vậy method nào giúp chúng ta làm việc này?
- Đó là method
has()
. Ví dụ:
if (Cache::has('key')){
Cache::get('key');
} else {
Cache::put('key', $values, 10);
}
- Remove giá trị cache
- Để remove giá trị cache thì chúng ta sử dụng method
forget()
. Ví dụ:
Cache::forget('key');
Ngoài ra chúng ta cũng có thể xóa cache bằng cách sử dụng console. Lệnh như sau:
php artisan cache:clear
III/ Ví dụ thực tế Ví dụ sau đây sẽ so sánh request khi có cache và không cache. Mời các bạn theo dõi để hiểu thêm nhé 1/ Tạo Model và Migrations
- Tạo model
artcticles
php artisan make:model Article -m
- Vào file migrations vừa tạo ở trên thêm 2 field như sau vào
public function up() {
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
// add the following
$table->string("title");
$table->string("content");
$table->timestamps();
});
}
- Migration database
php artisan migrate
2/ Seed data cho database
- Để cho nhanh gọn, các bạn vào file
database/seeds/DatabaseSeeder.php
. Tại methodrun()
các bạn thêm vào đoạn code như sau:
public function run() {
Model::unguard();
// use the faker library to mock some data
$faker = Faker::create();
// create 30 articles
foreach(range(1, 30) as $index) {
Article::create([
'title' => $faker->sentence(5),
'content' => $faker->paragraph(6)
]);
}
Model::reguard();
}
- Tiếp theo chạy lệnh sau để seed data
php artisan db:seed
3/ Tạo controller Article
- Chạy lệnh sau để tiến hành tạo controller
php artisan make:controller ArticlesController
- Tiếp theo chúng ta vào file
app/Http/routes.php
để định nghĩa một Endpoint cho Controller này
Route::group(['prefix' => 'api'], function() {
Route::get('articles', 'ArticlesController@index');
});
Tới đây thì chúng ta đã sẵn sàng để test đúng không nào . Ok, test thôi
4/ Test Request khi không cache
- Trong trường hợp này chúng ta không caching lại request và hãy thử xem khi không caching thì tốn bao lâu để response lại 1 request
public function index() {
$articles = Articles::all();
return response()->json($articles);
}
- Để thấy được time process một request thì có thể dùng postman để test. Mình test và thấy kết quả sau
5/ Test Response khi có cache
public function index() {
$articles = Cache::remember('articles', 22*60, function() {
return Article::all();
});
return response()->json($articles);
}
- Kết quả chạy postman => Thông qua ví dụ nhỏ ở trên thì các bạn đã hiểu phần nào về vai trò của caching đúng không nào. Sau đây mình sẽ so sánh khi dùng một số dạng cache cho các bạn thấy
IV/ Recommend 1/ Không dùng cache
2/ Dùng cache - File Driver
3/ Dùng cache - Memcache
4/ Dùng cache - Redis
- Lưu ý: Để dùng được Redis thì bạn phải cài package predis/predis thông qua composer
Thông qua các ví dụ, ứng dụng thực tế và bảng so sánh khi dùng các Driver cache thì chúng ta đã rút ra cho mình được những bài học về caching đúng không nào. Đến đây mình xin chào các bạn nha, cảm ơn các bạn đã đọc bài viết của mình
All rights reserved