Cache
Framework cung cấp hệ thống caching linh hoạt với nhiều drivers khác nhau.
Cấu hình
// config/cache.php
return [
'default' => env('CACHE_DRIVER', 'file'),
'prefix' => env('CACHE_PREFIX', 'vietiso_'),
'stores' => [
'file' => [
'driver' => 'file',
'path' => storage_path('cache'),
'marshaller' => \Vietiso\Core\Cache\Marshallers\SerializeMarshaller::class,
],
'database' => [
'driver' => 'database',
'connection' => null, // null = default connection
'table' => 'cache',
'marshaller' => \Vietiso\Core\Cache\Marshallers\SerializeMarshaller::class,
],
],
];
Sử dụng cơ bản
Facade
use Vietiso\Core\Cache\Facade\Cache;
// Lưu giá trị
Cache::set('key', 'value', 3600); // TTL 1 giờ
// Lấy giá trị
$value = Cache::get('key');
// Lấy với giá trị mặc định
$value = Cache::get('key', 'default');
// Kiểm tra tồn tại
if (Cache::has('key')) {
// ...
}
// Xóa
Cache::delete('key');
// Xóa toàn bộ cache
Cache::clear();
Remember Pattern
Tự động cache kết quả của callback:
$users = Cache::remember('all_users', 3600, function () {
return User::get();
});
// Nếu 'all_users' tồn tại -> trả về từ cache
// Nếu không -> chạy callback, lưu cache, và trả về kết quả
Làm việc với nhiều keys
// Lấy nhiều keys
$values = Cache::getMultiple(['key1', 'key2', 'key3']);
// Lưu nhiều keys
Cache::setMultiple([
'key1' => 'value1',
'key2' => 'value2',
], 3600);
// Xóa nhiều keys
Cache::deleteMultiple(['key1', 'key2']);
Cache Drivers
File Driver
Lưu cache vào filesystem, phù hợp cho development.
'file' => [
'driver' => 'file',
'path' => storage_path('cache'),
'marshaller' => SerializeMarshaller::class,
],
Database Driver
Lưu cache vào database, tự động tạo bảng nếu chưa tồn tại.
'database' => [
'driver' => 'database',
'connection' => null,
'table' => 'cache',
'marshaller' => SerializeMarshaller::class,
],
Cấu trúc bảng cache (tự động tạo):
CREATE TABLE cache (
`key` VARCHAR(255) NOT NULL PRIMARY KEY,
`item` LONGBLOB NOT NULL,
`lifetime` INTEGER,
`time` INTEGER
) ENGINE=InnoDB;
Sử dụng nhiều Drivers
// Sử dụng driver mặc định
Cache::set('key', 'value');
// Sử dụng driver cụ thể
Cache::driver('database')->set('key', 'value');
Cache::driver('file')->set('key', 'value');
TTL (Time To Live)
TTL có thể là số giây hoặc DateInterval:
// Số giây
Cache::set('key', 'value', 3600);
// DateInterval
Cache::set('key', 'value', new DateInterval('PT1H')); // 1 giờ
Cache::set('key', 'value', new DateInterval('P1D')); // 1 ngày
Ví dụ thực tế
Cache Query Results
public function getActiveUsers()
{
return Cache::remember('active_users', 300, function () {
return User::where('status', 'active')
->with('profile')
->get();
});
}
Cache với Tags Pattern
// Cache user data
$user = Cache::remember("user:{$userId}", 3600, function () use ($userId) {
return User::find($userId);
});
// Xóa cache khi user update
public function updateUser(int $userId, array $data)
{
$user = User::find($userId);
$user->update($data);
Cache::delete("user:{$userId}");
return $user;
}
Cache API Response
#[Get('/products')]
public function index()
{
return Cache::remember('products:all', 600, function () {
return Product::with('category')->get();
});
}
Invalidate Cache
// Sau khi tạo/cập nhật/xóa product
Cache::delete('products:all');
// Hoặc xóa theo pattern (tự implement)
public function clearProductCache()
{
Cache::delete('products:all');
Cache::delete('products:featured');
Cache::delete('products:latest');
}