[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-settings":3,"site-menu":10,"tag-cache":21},{"siteName":4,"siteDescription":5,"contactEmail":6,"phone":7,"githubUrl":8,"facebookUrl":9},"vdhoangson.com","Ghi chép về lập trình, hệ thống và những điều học được trên đường làm sản phẩm.","contact@vdhoangson.com","+84 387 324 112","https:\u002F\u002Fgithub.com\u002Fvdhoangson","",{"items":11},[12,15,18],{"href":13,"label":14},"\u002F","Mới nhất",{"href":16,"label":17},"\u002Fcategory\u002Fdich-vu","Dịch vụ",{"href":19,"label":20},"\u002Fabout","Về tôi",{"items":22,"total":59,"page":59,"pageSize":60},[23],{"id":24,"wordpressId":25,"title":26,"slug":27,"excerpt":28,"contentHtml":29,"status":30,"authorName":31,"seoTitle":26,"seoDescription":28,"featuredMediaId":32,"featuredMedia":33,"categories":45,"tags":52,"publishedAt":57,"createdAt":57,"updatedAt":58},"412a547f-adb6-4abe-a967-46bd3cff4e59",166,"Laravel Cache – Phân biệt put, set, remember, forever, và add","laravel-cache-phan-biet-put-set-remember-forever-va-add","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 […]","\n\u003Cp class=\"wp-block-paragraph\">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ư \u003Ccode>put\u003C\u002Fcode>, \u003Ccode>set\u003C\u002Fcode>, \u003Ccode>remember\u003C\u002Fcode>, \u003Ccode>forever\u003C\u002Fcode>, hay \u003Ccode>add\u003C\u002Fcode>. 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.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">1. \u003Ccode>put()\u003C\u002Fcode> và \u003Ccode>set()\u003C\u002Fcode>\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Ccode>put()\u003C\u002Fcode>\u003C\u002Fh3>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::put('username', 'sonvo', 3600);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Lưu giá trị vào cache với key \u003Ccode>username\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Thời gian sống (TTL) là 3600 giây (1 giờ).\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu key đã tồn tại → ghi đè.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Ccode>set()\u003C\u002Fcode>\u003C\u002Fh3>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::set('username', 'sonvo', 3600);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Thực chất giống \u003Cstrong>hệt\u003C\u002Fstrong> \u003Ccode>put()\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Được thêm vào để tuân thủ \u003Cstrong>PSR-16 (Simple Cache Standard)\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu bạn muốn code mang tính chuẩn, portable giữa các framework\u002Flib khác → dùng \u003Ccode>set()\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu code thuần Laravel → \u003Ccode>put()\u003C\u002Fcode> và \u003Ccode>set()\u003C\u002Fcode> như nhau.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Khi dùng:\u003C\u002Fstrong> muốn lưu cache có thời gian hết hạn.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">2. \u003Ccode>remember()\u003C\u002Fcode>\u003C\u002Fh2>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::remember('user:1', 3600, function () {\n    return User::find(1);\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Nếu key \u003Ccode>user:1\u003C\u002Fcode> \u003Cstrong>chưa có trong cache\u003C\u002Fstrong> → chạy callback (query DB), lưu vào cache trong 3600 giây, rồi trả về.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu key đã có → lấy luôn từ cache.\u003C\u002Fli>\n\n\n\n\u003Cli>Giúp tránh code lặp kiểu: \u003Ccode>if (Cache::has('user:1')) { return Cache::get('user:1'); } else { $user = User::find(1); Cache::put('user:1', $user, 3600); return $user; }\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Khi dùng:\u003C\u002Fstrong> 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ó.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">3. \u003Ccode>forever()\u003C\u002Fcode>\u003C\u002Fh2>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::forever('site_name', 'MiniApp');\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Lưu cache \u003Cstrong>vĩnh viễn\u003C\u002Fstrong> (cho đến khi bị xoá bằng \u003Ccode>forget()\u003C\u002Fcode> hoặc \u003Ccode>flush()\u003C\u002Fcode>).\u003C\u002Fli>\n\n\n\n\u003Cli>Không có TTL (time-to-live).\u003C\u002Fli>\n\n\n\n\u003Cli>Lưu ý: “vĩnh viễn” ở đây phụ thuộc vào driver. Ví dụ:\n\u003Cul class=\"wp-block-list\">\n\u003Cli>File \u002F Redis \u002F Database → giữ mãi cho đến khi xóa.\u003C\u002Fli>\n\n\n\n\u003Cli>APCu \u002F Memcached → vẫn có thể mất nếu server restart.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Khi dùng:\u003C\u002Fstrong> dữ liệu ít thay đổi, quan trọng, và muốn giữ lâu dài (ví dụ: config tĩnh).\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">4. \u003Ccode>add()\u003C\u002Fcode>\u003C\u002Fh2>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>Cache::add('token', 'ABC123', 600);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Chỉ thêm vào cache nếu key \u003Cstrong>chưa tồn tại\u003C\u002Fstrong>.\u003C\u002Fli>\n\n\n\n\u003Cli>Nếu key đã tồn tại → \u003Cstrong>bỏ qua\u003C\u002Fstrong> (không ghi đè).\u003C\u002Fli>\n\n\n\n\u003Cli>Trả về \u003Ccode>true\u003C\u002Fcode> nếu thêm thành công, \u003Ccode>false\u003C\u002Fcode> nếu thất bại.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Khi dùng:\u003C\u002Fstrong> lưu token, session, hoặc dữ liệu chỉ nên được set một lần và không được ghi đè.\u003C\u002Fp>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🔍 So sánh nhanh\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Method\u003C\u002Fth>\u003Cth>Ghi đè key cũ?\u003C\u002Fth>\u003Cth>Có TTL không?\u003C\u002Fth>\u003Cth>Callback hỗ trợ?\u003C\u002Fth>\u003Cth>Ghi chú\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Ccode>put\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>Chuẩn Laravel\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>set\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>Alias theo PSR-16\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>remember\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>Tự động query\u002Fcache\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>forever\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>Cache vĩnh viễn\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>add\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>Chỉ set nếu chưa có\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n\n\n\n\u003Chr class=\"wp-block-separator has-alpha-channel-opacity\" \u002F>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🚀 Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>\u003Ccode>put\u003C\u002Fcode> \u002F \u003Ccode>set\u003C\u002Fcode>\u003C\u002Fstrong>: lưu cache tạm thời (có TTL).\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>\u003Ccode>remember\u003C\u002Fcode>\u003C\u002Fstrong>: thông minh hơn, chỉ query khi cần.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>\u003Ccode>forever\u003C\u002Fcode>\u003C\u002Fstrong>: dữ liệu vĩnh viễn.\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>\u003Ccode>add\u003C\u002Fcode>\u003C\u002Fstrong>: chỉ lưu khi chưa tồn tại.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">👉 Khi code thực tế:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Dữ liệu thay đổi thường xuyên → \u003Ccode>put\u003C\u002Fcode> hoặc \u003Ccode>set\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Dữ liệu cần tránh query nhiều lần → \u003Ccode>remember\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Dữ liệu config\u002Ftĩnh → \u003Ccode>forever\u003C\u002Fcode>.\u003C\u002Fli>\n\n\n\n\u003Cli>Trường hợp tránh ghi đè → \u003Ccode>add\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n","published","vdhoangson@gmail.com","a306442c-6e50-4776-83a2-c5127e5e933e",{"id":32,"wordpressId":34,"filename":35,"storageKey":36,"sourceUrl":37,"mimeType":38,"altText":9,"caption":39,"width":40,"height":41,"createdAt":42,"updatedAt":43,"url":44},16253,"laravel-cache.jpg","wordpress\u002F2025\u002F07\u002Flaravel-cache.jpg","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F07\u002Flaravel-cache.jpg","image\u002Fjpeg",null,1600,900,"2025-09-18T14:17:45.000Z","2026-10-15T04:59:31.204Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F07\u002Flaravel-cache.jpg",[46],{"id":47,"wordpressId":48,"name":49,"slug":50,"parentId":51},"5f89b685-533f-4c09-85fa-d018f8fd71a4",3,"Laravel","laravel","f6aff5ed-b85e-45e6-bbdb-08788be09d67",[53],{"id":54,"wordpressId":55,"name":56,"slug":56},"7858171b-c456-40cc-a578-aaee380a5e8e",305,"cache","2025-07-07T02:57:04.000Z","2025-09-18T14:52:51.000Z",1,12]