Bộ nhớ đệm là gì? Dữ liệu được lưu trong bộ nhớ đệm giúp tăng tốc độ như thế nào?
Một CPU hiện đại có thể lấy một giá trị từ bộ nhớ đệm gần nhất trong thời gian chưa đến một nano giây. Việc truy cập vào bộ nhớ chính để lấy cùng giá trị đó mất thời gian gấp khoảng trăm lần. Vì vậy, con chip thực hiện điều hiển nhiên: nó giữ một bản sao của dữ liệu mà nó có khả năng cần ngay bên cạnh nó. Bản sao đó là bộ nhớ đệm (cache), và thủ thuật này được lặp lại ở mọi lớp điện toán, từ silicon trong bộ xử lý của bạn cho đến máy chủ đã cung cấp trang này. Hướng dẫn này giải thích bộ nhớ đệm là gì, cách hoạt động của bộ nhớ đệm, mọi nơi nó tồn tại và liệu bạn có nên xóa nó hay không.
Định nghĩa bộ nhớ đệm: bộ nhớ đệm thực sự là gì
Bộ nhớ đệm là nơi lưu trữ tạm thời. Nó nhỏ, nhanh và được đặt càng gần với thành phần cần đến càng tốt. Nó lưu giữ các bản sao dữ liệu mà hệ thống dự kiến sẽ cần lại, vì vậy khi cần thiết, hệ thống có thể truy xuất bản sao thay vì phải thực hiện lại các thao tác chậm hoặc tốn kém. Mở trang này lần thứ hai và một phần lớn dữ liệu sẽ được tải từ bản sao đã có sẵn trên máy tính của bạn, chứ không phải từ máy chủ.
Từ "tạm thời" đóng vai trò quan trọng ở đây. Dữ liệu được lưu trong bộ nhớ cache không bao giờ là bản gốc. Nó là một bản sao, được giữ lại chỉ để tăng tốc độ, và bạn có thể xóa nó bất cứ khi nào bạn muốn. Xóa nó đi và không có gì có giá trị biến mất. Hệ thống chỉ cần quay lại nguồn gốc thực sự và xây dựng lại bản sao. Số dư tài khoản ngân hàng của bạn không nằm trong bộ nhớ cache; một bản sao của trang web hiển thị số dư đó thì có thể. Khoảng cách giữa nguồn gốc thực sự và bản sao dùng một lần đó chính là lý do tại sao việc sử dụng bộ nhớ cache lại an toàn cho mọi thứ. Trường hợp xấu nhất, nếu bản sao bị thiếu hoặc sai, hệ thống sẽ không sao, lấy dữ liệu từ nguồn gốc và tiếp tục hoạt động.
Cách thức hoạt động của bộ nhớ đệm: truy cập thành công, truy cập thất bại và loại bỏ khỏi bộ nhớ đệm
Mọi bộ nhớ đệm, ở mọi nơi, đều hoạt động dựa trên một câu hỏi duy nhất: Tôi đã có bản sao của cái này chưa? Có nghĩa là câu trả lời nhanh chóng. Cung cấp bản sao, bỏ qua đường dẫn chậm, xong. Không có nghĩa là bạn thực hiện công việc chậm đó một lần: lấy từ nguồn, trả lại kết quả và giữ một bản sao để các yêu cầu trong tương lai được nhanh chóng. Đó là toàn bộ cơ chế. Phần còn lại là việc quản lý xung quanh hai vấn đề phức tạp, đó là cần loại bỏ cái gì khi dung lượng bộ nhớ đệm sắp hết và làm thế nào để tránh trả lại một bản sao đã lỗi thời.
truy cập bộ nhớ cache thành công so với truy cập bộ nhớ cache thất bại
Tìm thấy rồi? Đó là một lần truy cập thành công vào bộ nhớ cache. Không tìm thấy? Đó là một lần truy cập thất bại vào bộ nhớ cache, buộc hệ thống phải truy cập vào bộ nhớ đệm chậm hơn. Tỷ lệ các yêu cầu kết thúc bằng một lần truy cập thành công được gọi là tỷ lệ truy cập thành công (hit ratio), và đó là con số mà các kỹ sư thực sự theo dõi. Một mạng phân phối nội dung (CDN) phục vụ các tệp tĩnh như hình ảnh và bảng định kiểu hướng đến tỷ lệ 95 đến 99%. Đạt được tỷ lệ đó, và hầu hết mọi khách truy cập đều nhận được một bản sao gần đó trong khi máy chủ gốc hầu như không bị tác động. Tỷ lệ truy cập thành công thấp có nghĩa là bộ nhớ cache chủ yếu chỉ mang tính chất trang trí.
Khi bộ nhớ đệm đầy: chính sách loại bỏ
Bộ nhớ đệm được thiết kế nhỏ gọn một cách có chủ đích. Lưu trữ nhanh tốn kém, vì vậy không bao giờ có đủ chỗ cho mọi thứ, và một khi bộ nhớ đệm đầy, một số thứ phải bị loại bỏ. Quy tắc chọn ra thứ bị loại bỏ chính là chính sách loại bỏ. Mặc định thông thường là Sử dụng ít nhất gần đây (LRU): loại bỏ bất cứ thứ gì không được sử dụng lâu nhất, với hy vọng rằng những gì bạn đã bỏ qua gần đây bạn sẽ tiếp tục bỏ qua. Các phương pháp khác tính toán khác nhau. Sử dụng ít nhất thường xuyên (LFU) theo dõi tần suất truy cập của từng mục. Vào trước ra trước (FIFO) chỉ đơn giản là loại bỏ mục cũ nhất. Cùng một rủi ro, chỉ khác hình thức. Mỗi chính sách thực chất là một phỏng đoán về bản sao nào bạn sẽ ít nhớ nhất.
Giữ bản sao luôn được cập nhật: Chính sách TTL và ghi
Một bản sao chỉ được coi là tốt khi nó vẫn khớp với bản gốc. Vì vậy, hầu hết các bộ nhớ đệm đều gắn cho mỗi mục một thời gian tồn tại (TTL): một bộ đếm ngược, sau đó bản sao được coi là hết hạn và phải được kiểm tra lại hoặc tải lại. Trên web, tiêu đề Cache-Control thiết lập đồng hồ này. Quy tắc được quy định trong RFC 9111 , và chỉ thị max-age của nó cho phép một phản hồi được lưu trong bộ nhớ đệm tối đa một năm, hoặc 31.536.000 giây nếu bạn muốn con số chính xác. Việc ghi dữ liệu là một nửa vấn đề khác. Ghi trực tiếp (write-through) lưu vào bộ nhớ đệm và nguồn cùng một lúc, điều này an toàn nhưng chậm hơn. Ghi ngược (write-back) lưu vào bộ nhớ đệm ngay bây giờ và nguồn sau đó, điều này nhanh hơn nhưng để lại một khoảng thời gian ngắn mà hai bên không khớp nhau. Hãy chọn sự đánh đổi phù hợp.

Các loại bộ nhớ đệm: từ CPU đến mạng phân phối nội dung
Đây là phần mà hầu hết các lời giải thích đều bỏ sót. Bộ nhớ cache của trình duyệt và bộ nhớ cache L1 của CPU nghe có vẻ khác biệt — nhưng chúng thực chất là cùng một ý tưởng ở các khoảng cách khác nhau. Mỗi lớp đều giữ các bản sao của dữ liệu truy cập chậm gần với bất cứ thứ gì cần đến nó. Đi theo từng bước từ trong ra ngoài và mô hình này lặp lại toàn bộ.
Bộ nhớ đệm: Các cấp độ bộ nhớ đệm CPU L1, L2, L3
Quá trình lưu trữ dữ liệu nhanh nhất diễn ra ngay trên bộ xử lý. Các CPU hiện đại có ba cấp bộ nhớ đệm được xây dựng từ SRAM, một loại bộ nhớ nhanh hơn nhiều so với DRAM được sử dụng cho bộ nhớ chính và đắt hơn nhiều trên mỗi byte. L1 rất nhỏ và hoạt động gần như tức thời, chỉ vài chục kilobyte mỗi lõi trả về dữ liệu trong khoảng một nano giây. L2 lớn hơn và chậm hơn một chút. L3 còn lớn hơn nữa và được chia sẻ giữa các lõi; Intel Core i9-14900K được trang bị 36 MB L3, và AMD Ryzen 9 7950X3D nâng dung lượng L3 lên 128 MB. Tất cả điều này tồn tại để bù đắp cho một khoảng cách: việc truy xuất dữ liệu từ L1 mất chưa đến một nano giây, trong khi bộ nhớ chính DDR5 mất khoảng 70 giây, chênh lệch khoảng một trăm lần. Bộ nhớ đệm hoạt động hiệu quả vì các chương trình tái sử dụng cùng một dữ liệu và dữ liệu nằm gần nó, một thói quen được gọi là tính cục bộ của tham chiếu.
| Lớp | Kích thước điển hình | Thời gian truy cập điển hình | Nó chứa đựng điều gì? |
|---|---|---|---|
| Bộ nhớ đệm CPU L1 | 32-80 KB mỗi lõi | ~0,7-1 ns | Các hướng dẫn và giá trị tiếp theo |
| Bộ nhớ đệm CPU L2 | 0,5-2 MB mỗi lõi | ~3-4 ns | Dữ liệu được sử dụng gần đây ở vùng lõi |
| Bộ nhớ đệm CPU L3 | 16-128 MB được chia sẻ | ~10-20 ns | Dữ liệu được chia sẻ giữa các lõi |
| Bộ nhớ chính (RAM) | 8-64 GB | ~70-100 ns | Các chương trình đang chạy và dữ liệu hoạt động |
| Bộ nhớ SSD | 256 GB-4 TB | ~50-100 µs | Các tập tin và hệ điều hành |
| nút biên CDN | thay đổi | ~20 ms qua mạng | Bản sao trên web gần khách truy cập |
| Máy chủ gốc | thay đổi | ~100-200 ms xuyên vùng | Nguồn gốc của sự thật |
Bộ nhớ đệm của ổ đĩa, hệ điều hành và ứng dụng
Bên cạnh phần cứng, phần mềm còn có bộ nhớ đệm riêng. Hệ điều hành lưu trữ dữ liệu được truy cập thường xuyên, chẳng hạn như các tệp đã đọc gần đây, trong RAM dự phòng để việc mở lại chúng diễn ra tức thì. Cơ sở dữ liệu lưu trữ kết quả của các truy vấn phổ biến. Các ứng dụng thêm một lớp bộ nhớ chuyên dụng, thường là Redis hoặc Memcached, nằm giữa ứng dụng và cơ sở dữ liệu, và xử lý các yêu cầu lặp lại trong vòng micro giây. Nhiệm vụ của nó hoàn toàn giống với CPU: giữ những dữ liệu được truy cập nhiều nhất trong bộ nhớ nhanh hơn để bạn không phải trả giá hai lần cho tốc độ chậm.
Bộ nhớ đệm phía máy chủ và CDN
Lớp ngoài cùng trải rộng khắp internet. Khi máy chủ web lưu trữ các trang đã hoàn thành, nó tránh việc phải xây dựng lại chúng cho mỗi khách truy cập. Mạng phân phối nội dung (CDN) tiến xa hơn, sao chép các tài nguyên đó lên các máy chủ biên trải rộng khắp toàn cầu để mỗi yêu cầu được trả lời từ một máy tính gần người dùng về mặt vật lý. Một yêu cầu truy cập từ máy chủ biên của CDN có thể trả về trong khoảng 20 mili giây, so với 100 đến 200 mili giây khi yêu cầu phải vượt qua các châu lục để đến máy chủ gốc. Mô hình này hiện đang thống trị web: đến năm 2024, khoảng 75% nội dung của bên thứ ba được phân phối thông qua CDN.
Bộ nhớ đệm trình duyệt: những gì trình duyệt web của bạn lưu trữ
Bộ nhớ cache của trình duyệt là thứ mà hầu hết mọi người thực sự gặp phải. Khi tải một trang web, trình duyệt web sẽ âm thầm lưu trữ các thành phần của trang đó vào thiết bị của bạn: mã HTML, bảng định kiểu, tập lệnh, hình ảnh, phông chữ. Quay lại sau, trình duyệt sẽ đọc trực tiếp các tệp đó từ ổ đĩa thay vì tải lại, đó là lý do tại sao lần truy cập thứ hai vào một trang web lại mở nhanh hơn lần đầu. Logo của trang web? Được tải xuống một lần và sử dụng lại trên mọi trang hiển thị nó.
Điều khiến tôi khó hiểu là: phần lớn tốc độ đó lại không được tận dụng. Tính đến năm 2021, khoảng 90,4% phản hồi web trên máy tính để bàn có thể được lưu vào bộ nhớ cache , nhưng vẫn có đến 52% trang web nằm dưới mức phân vị thứ 25 trong bài kiểm tra bộ nhớ cache tiêu chuẩn của trình duyệt. Lợi ích nằm ngay đó, miễn phí, và hầu hết người dùng trên web lại bỏ qua nó. Thiết lập bộ nhớ cache đúng cách và bạn sẽ nhận được lợi ích ngay lập tức. Các lần truy cập tiếp theo sẽ nhanh hơn, mức sử dụng dữ liệu di động giảm xuống, và máy chủ gốc sẽ không còn phải xử lý các yêu cầu dư thừa nữa.

Lợi ích của bộ nhớ đệm: tại sao nó giúp mọi thứ nhanh hơn
Bộ nhớ đệm là một sự đánh đổi. Bạn bỏ ra một ít bộ nhớ và chấp nhận một rủi ro nhỏ là cung cấp dữ liệu hơi lỗi thời, đổi lại bạn có được tốc độ, tải trọng thấp hơn và chi phí thấp hơn. Ba lợi ích đó là lý do tại sao bộ nhớ đệm xuất hiện ở mọi lớp chứ không chỉ một lớp duy nhất.
Tốc độ là lợi thế rõ ràng nhất: việc cung cấp bản sao từ bộ nhớ gần đó nhanh hơn nhiều so với việc tính toán lại kết quả hoặc truyền tải nó qua mạng. Lợi ích thứ hai là giảm tải cho máy chủ nguồn. Mỗi yêu cầu được bộ nhớ đệm xử lý là một yêu cầu mà cơ sở dữ liệu hoặc máy chủ gốc không bao giờ phải xử lý, giúp hệ thống hoạt động ổn định trong thời gian lưu lượng truy cập tăng đột biến. Thứ ba là tiết kiệm chi phí: việc cung cấp các byte được lưu trong bộ nhớ đệm từ một nút biên rẻ hơn so với việc tạo ra chúng mới và gửi từ máy chủ trung tâm, và khi bạn cần truy cập dữ liệu nhiều lần, khoản tiết kiệm đó sẽ tăng lên nhanh chóng.
Lợi ích mà người dùng nhận thấy từ hiệu suất ứng dụng là có thật và có thể đo lường được. Nghiên cứu năm 2018 của Google về các trang web trên thiết bị di động cho thấy việc giảm thời gian tải trang chỉ một giây đã giúp tăng tỷ lệ chuyển đổi lên tới 27%, trong khi một nghiên cứu năm 2012 của Aberdeen Group, được trích dẫn rộng rãi, cho thấy chi phí của sự chậm trễ một giây là giảm 7% tỷ lệ chuyển đổi. Trang web nhanh hơn giúp giữ chân người dùng. Sử dụng bộ nhớ đệm là một trong những cách tiết kiệm nhất để đạt được điều đó.
| Loại bộ nhớ đệm | Nơi nó sinh sống | Nó lưu trữ những gì | Ai quản lý nó? | Tuổi thọ điển hình |
|---|---|---|---|---|
| Bộ nhớ đệm CPU (L1/L2/L3) | Trên bộ xử lý | Hướng dẫn và dữ liệu quan trọng | Phần cứng, tự động | Micro giây |
| Bộ nhớ đệm trình duyệt | Thiết bị của bạn | HTML, CSS, JS, hình ảnh, phông chữ | Trình duyệt web của bạn | Từ giờ đến năm |
| Bộ nhớ đệm ứng dụng | Bộ nhớ máy chủ ứng dụng | Kết quả truy vấn, phiên | Các nhà phát triển (Redis, Memcached) | Từ giây đến giờ |
| Bộ nhớ đệm máy chủ / CDN | Máy chủ biên trên toàn thế giới | Trang, phương tiện, phản hồi API | Chủ sở hữu trang web và CDN | Mỗi TTL điều khiển bộ nhớ đệm |
| Bộ nhớ đệm DNS | Hệ điều hành, bộ định tuyến, trình phân giải | Tra cứu tên miền thành địa chỉ IP | Trình phân giải DNS | Từ 5 phút đến 24 giờ |
Bạn có nên xóa dữ liệu được lưu trong bộ nhớ đệm không, và khi nào?
Mọi người thường coi việc xóa bộ nhớ cache như một việc vặt trong danh sách kiểm tra bảo trì. Hãy bỏ qua danh sách đó. Nó thực chất chỉ là một công cụ khắc phục sự cố, không hơn không kém. Hầu hết các ngày, hãy để dữ liệu trong bộ nhớ cache ở đó, vì nó đang âm thầm giúp mọi trang web bạn truy cập lại tải nhanh hơn.
Vậy khi nào việc xóa bộ nhớ cache đáng để thực hiện? Thành thật mà nói, chỉ có ba trường hợp. Một trang web bị lỗi hoặc liên tục hiển thị phiên bản được lưu trong bộ nhớ cache cũ sau khi cập nhật, và bản sao cũ đó trong bộ nhớ cache của trình duyệt hầu như luôn là nguyên nhân; việc xóa bộ nhớ cache sẽ buộc trình duyệt phải tải lại từ đầu. Bạn đã sử dụng máy tính dùng chung hoặc máy tính công cộng và muốn xóa dấu vết cục bộ của những gì bạn đã xem. Hoặc điện thoại của bạn chỉ còn vài gigabyte dung lượng và bạn cần giải phóng dung lượng, vì bộ nhớ cache của trình duyệt có thể tự động phình to lên đến vài gigabyte. Ngoài những trường hợp đó, việc xóa bộ nhớ cache không mang lại lợi ích gì. Nó sẽ làm chậm lần truy cập tiếp theo của bạn vào mọi trang web trong khi trình duyệt xây dựng lại các bản sao của nó, và một số trình duyệt sẽ đăng xuất bạn trong quá trình này. Điều mà mọi người thường hiểu sai nhất: xóa bộ nhớ cache không xóa cookie hoặc mật khẩu đã lưu của bạn. Chúng được lưu trữ riêng biệt và vẫn còn sau khi xóa bộ nhớ cache, trừ khi bạn chủ động chọn xóa chúng.
| Trình duyệt | Nơi xóa bộ nhớ đệm |
|---|---|
| Chrome | Cài đặt, Quyền riêng tư và bảo mật, Xóa dữ liệu duyệt web, Hình ảnh và tệp tin đã lưu trong bộ nhớ cache |
| Firefox | Cài đặt, Quyền riêng tư và Bảo mật, Cookie và Dữ liệu Trang web, Xóa dữ liệu |
| Cuộc đi săn | Cài đặt, Safari, Xóa lịch sử và dữ liệu trang web |
| Bờ rìa | Cài đặt, Quyền riêng tư, Chọn những gì cần xóa |
Cache, cookies và buffer: làm rõ sự nhầm lẫn
Ba từ này, thường bị nhầm lẫn, đều liên quan đến việc lưu trữ dữ liệu. Mỗi từ có một chức năng khác nhau. Bộ nhớ đệm (cache) lưu giữ bản sao của nội dung để bạn có thể truy cập nhanh hơn vào lần sau. Cookie là một ghi chú nhỏ mà trang web để lại để ghi nhớ bạn: phiên đăng nhập, cài đặt ngôn ngữ, tùy chọn đã lưu. Nó mang thông tin nhận dạng, chứ không phải nội dung. Bộ đệm (buffer) lại khác. Nó lưu trữ dữ liệu trong quá trình truyền tải, giống như vài giây video mà luồng phát tải trước khi bạn xem. Cách ngắn gọn nhất để phân biệt chúng: dữ liệu trong bộ nhớ đệm được lưu giữ để sử dụng lại, cookie ghi nhớ bạn là ai, và bộ đệm sẽ được xóa ngay lập tức khi được sử dụng.
Những điều cần nhớ về bộ nhớ đệm và cơ chế lưu vào bộ nhớ đệm.
Một khi bạn hiểu bộ nhớ đệm chỉ đơn giản là "giữ một bản sao của thứ chậm chạp gần nơi cần thiết", nó sẽ không còn giống một tính năng phần cứng nữa mà trở thành một thói quen xuyên suốt toàn bộ lĩnh vực điện toán, từ việc tải dữ liệu trong 0,7 nano giây trên CPU đến việc sao chép trang này được lưu trữ trên máy chủ biên gần thành phố của bạn. Bài học thực tiễn mà web chưa học được là: phần lớn tốc độ đó là miễn phí và hầu hết các trang web vẫn bỏ qua nó. Lần tới khi một trang web mở ra nhanh đến mức bạn không kịp chớp mắt, bạn sẽ biết chính xác bản sao nào đã giúp bạn tiết kiệm thời gian.