Chiều nay tôi làm việc với web laravel, yêu cầu là phải tăng tốc nên tôi đã cài đặt gói này và dùng thử.
Hiệu quả khá tốt anh ẹm tuy nhiên mới dùng thật sự rất rối. Nếu làm theo hướng dẫn, thêm vào middle thì trang nào cũng cache cả anh em. Nên khi tôi update 1 cái hình avatar mới nó cũng không hiện được luôn. Sau đó tôi rút ra kinh nghiệm như sau:
- không cấu hình cache làm middleware cho toàn bộ route, nó cache cả phần admin luôn mới mệt
- đặt alias cho middleware trong phần kernel và chỉ đăt cachereponse cho những route mà mình muốn nó nhanh mượt ví dụ như trang chủ
- đặt cache từng phần trong controller khi render viewer, tránh bị cache những phần tương tác với người dùng liên tục.
Dưới đây là nội dung tham khảo, anh em xem và cài đặt nhé
1. Cài đặt package
Chạy lệnh sau để cài đặt package:
bash
Copy code
composer require spatie/laravel-responsecache
2. Cấu hình package
Sau khi cài đặt, bạn cần publish file cấu hình:
bash
Copy code
php artisan vendor:publish --provider="Spatie\ResponseCache\ResponseCacheServiceProvider" --tag="config"
Điều này sẽ tạo file cấu hình tại config/responsecache.php
.
3. Tùy chỉnh cấu hình
Các thiết lập quan trọng trong file config/responsecache.php
:
Driver Cache: Đảm bảo driver cache của bạn được cấu hình trong .env
:
env
Copy code
CACHE_DRIVER=file
Hoặc đổi thành Redis, Memcached nếu cần hiệu suất cao hơn.
URI Không Cache: Bạn có thể chỉ định các URI không nên được cache:
php
Copy code
'excluded_paths' => [
'admin/*', // Không cache các trang admin
],
TTL (Time-to-Live): Thời gian lưu cache (mặc định là không giới hạn):
php
Copy code
'cache_lifetime_in_seconds' => 3600, // Cache trong 1 giờ
4. Sử dụng cơ bản
Tự động lưu trữ và phục hồi cache
Khi package được cài đặt, tất cả các request GET sẽ tự động được cache. Bạn không cần thêm bất kỳ mã nào nếu không có yêu cầu tùy chỉnh.
5. Tùy chỉnh hành vi caching
Thêm Middleware cho Response Cache
Đảm bảo middleware ResponseCache
được thêm vào nhóm middleware trong file app/Http/Kernel.php
:
php
Copy code
protected $middlewareGroups = [
'web' => [
\Spatie\ResponseCache\Middlewares\CacheResponse::class,
],
];
6. Làm mới hoặc xóa Cache
Xóa toàn bộ cache:
bash
Copy code
php artisan responsecache:clear
Xóa cache khi cập nhật dữ liệu:
Trong các action Controller, bạn có thể sử dụng:
php
Copy code
use Spatie\ResponseCache\Facades\ResponseCache;
// Xóa toàn bộ cache
ResponseCache::clear();
Hoặc bạn có thể sử dụng một Event hoặc Hook để xóa cache tự động khi dữ liệu thay đổi.
7. Bỏ qua cache cho một số route
Bạn có thể thêm middleware DoNotCacheResponse
để bỏ qua cache cho một số route cụ thể.
Ví dụ trong route:
php
Copy code
use Spatie\ResponseCache\Middlewares\DoNotCacheResponse;
Route::get('/profile', 'ProfileController@show')->middleware(DoNotCacheResponse::class);
8. Tùy chỉnh khi Cache Phụ Thuộc Dữ Liệu
Bạn có thể sử dụng cache profile để thêm điều kiện cache tùy thuộc vào logic cụ thể, ví dụ như phụ thuộc vào session người dùng.
Tạo Cache Profile
Tạo một class mới implement ResponseCacheProfile
:
php
Copy code
php artisan make:responsecacheprofile CustomCacheProfile
Class sẽ được tạo trong App/ResponseCacheProfiles/CustomCacheProfile.php
. Thêm logic của bạn tại đây. Ví dụ: chỉ cache với người dùng không đăng nhập:
php
Copy code
namespace App\ResponseCacheProfiles;
use Illuminate\Http\Request;
use Spatie\ResponseCache\CacheProfiles\CacheProfile;
class CustomCacheProfile implements CacheProfile
{
public function shouldCacheRequest(Request $request): bool
{
return !$request->user(); // Chỉ cache nếu không có user
}
public function cacheNameSuffix(Request $request): string
{
return '';
}
public function useCacheNameSuffix(): bool
{
return false;
}
}
Sau đó cấu hình profile trong file config/responsecache.php
:
php
Copy code
'cache_profile' => \App\ResponseCacheProfiles\CustomCacheProfile::class,
9. Kiểm tra Cache
Bạn có thể kiểm tra trạng thái cache của các route bằng cách bật log. Trong .env
:
env
Copy code
LOG_CHANNEL=stack
RESPONSE_CACHE_DEBUG=true
10. Ví dụ Thực Tế
Cache trang danh sách sản phẩm
php
Copy code
Route::get('/products', 'ProductController@index');
Khi người dùng truy cập /products
, kết quả response sẽ được cache. Nếu bạn thay đổi dữ liệu sản phẩm, hãy xóa cache như sau:
php
Copy code
use Spatie\ResponseCache\Facades\ResponseCache;
public function store(Request $request)
{
// Lưu sản phẩm mới
Product::create($request->all());
// Xóa cache liên quan đến sản phẩm
ResponseCache::clear();
}
11. Các Lệnh Artisan Hữu Ích
spatie/laravel-responsecache
là một package mạnh mẽ và dễ sử dụng, giúp bạn tối ưu hóa hiệu suất ứng dụng Laravel, đặc biệt cho các trang có dữ liệu không thay đổi thường xuyên. Bằng cách sử dụng package này, bạn có thể giảm tải hệ thống và cải thiện trải nghiệm người dùng.