Cache
File:
packages/skilldo/framework/src/Cache/Cache.php
Namespace:SkillDo\Cache\Cache
Alias ngắn:\Cache
Cache giúp lưu trữ dữ liệu tốn nhiều thời gian truy vấn vào bộ nhớ đệm để truy xuất nhanh hơn ở các request tiếp theo.
SkillDo CMS v8 hỗ trợ 3 cache driver:
file(mặc định): lưu cache vào file trongstorage/framework/cache/redis: lưu cache vào Redis server (classCacheRedis)memcached: lưu cache vào Memcached server (classCacheMemcached)
Cấu Hình
Class Cache đọc trực tiếp file config/cache.php ở gốc project (qua Path::config('cache.php')). Nếu file không tồn tại, driver mặc định là file. File cấu hình mẫu (tham khảo defaults tại packages/skilldo/framework/src/config/cache.php):
return [
'default' => env('CACHE_DRIVER', 'file'),
'stores' => [
'file' => [
'driver' => 'file',
],
'redis' => [
'driver' => 'redis',
'host' => env('REDIS_HOST', '127.0.0.1'),
'port' => env('REDIS_PORT', 6379),
'password' => env('REDIS_PASSWORD', null),
'database' => env('REDIS_CACHE_DB', 0),
'prefix' => env('REDIS_PREFIX', 'cache:'),
],
'memcached' => [
'driver' => 'memcached',
'servers' => [
['host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => env('MEMCACHED_PORT', 11211), 'weight' => 100],
],
'prefix' => env('MEMCACHED_PREFIX', 'cache:'),
],
],
'prefix' => env('CACHE_PREFIX', 'skilldo_cache'),
];
Cache::get()
Lấy giá trị từ bộ nhớ cache. Trả về $default (mặc định null) nếu không tồn tại hoặc đã hết hạn.
Cache::get(string $key, mixed $default = null): mixed
$posts = Cache::get('latest_posts');
// Với Closure làm default: được thực thi và trả về kết quả khi cache miss
// (lưu ý: kết quả KHÔNG được lưu vào cache — muốn lưu thì dùng Cache::remember)
$posts = Cache::get('latest_posts', function () {
return \Post::orderBy('created', 'desc')->limit(10)->get();
});
Per-request memo (mới): Với driver
file, mỗi cache key chỉ đọc + unserialize từ disk một lần mỗi request; kết quả được giữ trong bộ nhớ (memoization) cho các lần gọiget/hastiếp theo, nên gọi lặp lại không tốn I/O.
Cache::has()
Kiểm tra xem một cache có tồn tại không.
Cache::has(string $key): bool
if (Cache::has('latest_posts')) {
$posts = Cache::get('latest_posts');
}