Caching trong Laravel là một trong những tính năng mạnh mẽ nhất giúp tăng hiệu suất ứng dụng, giảm tải database và tăng tốc độ phản hồi. Tuy nhiên, nhiều dev hay bị nhầm lẫn giữa các method như put
, set
, remember
, forever
, hay add
. Bài này sẽ phân tích chi tiết sự khác nhau và khi nào nên dùng từng cái.
1. put()
và set()
put()
Cache::put('username', 'sonvo', 3600);
- Lưu giá trị vào cache với key
username
. - Thời gian sống (TTL) là 3600 giây (1 giờ).
- Nếu key đã tồn tại → ghi đè.
set()
Cache::set('username', 'sonvo', 3600);
- Thực chất giống hệt
put()
. - Được thêm vào để tuân thủ PSR-16 (Simple Cache Standard).
- Nếu bạn muốn code mang tính chuẩn, portable giữa các framework/lib khác → dùng
set()
. - Nếu code thuần Laravel →
put()
vàset()
như nhau.
✅ Khi dùng: muốn lưu cache có thời gian hết hạn.
2. remember()
Cache::remember('user:1', 3600, function () {
return User::find(1);
});
- Nếu key
user:1
chưa có trong cache → chạy callback (query DB), lưu vào cache trong 3600 giây, rồi trả về. - Nếu key đã có → lấy luôn từ cache.
- Giúp tránh code lặp kiểu:
if (Cache::has('user:1')) { return Cache::get('user:1'); } else { $user = User::find(1); Cache::put('user:1', $user, 3600); return $user; }
✅ Khi dùng: muốn cache dữ liệu tốn chi phí lấy (DB query, API call) và tự động lấy lại nếu chưa có.
3. forever()
Cache::forever('site_name', 'MiniApp');
- Lưu cache vĩnh viễn (cho đến khi bị xoá bằng
forget()
hoặcflush()
). - Không có TTL (time-to-live).
- Lưu ý: “vĩnh viễn” ở đây phụ thuộc vào driver. Ví dụ:
- File / Redis / Database → giữ mãi cho đến khi xóa.
- APCu / Memcached → vẫn có thể mất nếu server restart.
✅ Khi dùng: dữ liệu ít thay đổi, quan trọng, và muốn giữ lâu dài (ví dụ: config tĩnh).
4. add()
Cache::add('token', 'ABC123', 600);
- Chỉ thêm vào cache nếu key chưa tồn tại.
- Nếu key đã tồn tại → bỏ qua (không ghi đè).
- Trả về
true
nếu thêm thành công,false
nếu thất bại.
✅ Khi dùng: lưu token, session, hoặc dữ liệu chỉ nên được set một lần và không được ghi đè.
🔍 So sánh nhanh
Method | Ghi đè key cũ? | Có TTL không? | Callback hỗ trợ? | Ghi chú |
---|---|---|---|---|
put | ✅ Có | ✅ Có | ❌ Không | Chuẩn Laravel |
set | ✅ Có | ✅ Có | ❌ Không | Alias theo PSR-16 |
remember | ✅ Có | ✅ Có | ✅ Có | Tự động query/cache |
forever | ✅ Có | ❌ Không | ❌ Không | Cache vĩnh viễn |
add | ❌ Không | ✅ Có | ❌ Không | Chỉ set nếu chưa có |
🚀 Kết luận
put
/set
: lưu cache tạm thời (có TTL).remember
: thông minh hơn, chỉ query khi cần.forever
: dữ liệu vĩnh viễn.add
: chỉ lưu khi chưa tồn tại.
👉 Khi code thực tế:
- Dữ liệu thay đổi thường xuyên →
put
hoặcset
. - Dữ liệu cần tránh query nhiều lần →
remember
. - Dữ liệu config/tĩnh →
forever
. - Trường hợp tránh ghi đè →
add
.