NhaLapTrinh.comNhà Lập Trình
Máy tính chạy thế nào

Bộ nhớ đệm là gì, vì sao sửa rồi mà vẫn thấy bản cũ?

Bộ nhớ đệm là chỗ giữ tạm một bản sao của kết quả để lần sau lấy ra nhanh thay vì làm lại. Bạn sửa rồi mà vẫn thấy bản cũ vì một tầng đệm nào đó, ở trình duyệt, ở mạng hay ở máy chủ, còn giữ bản sao cũ và chưa biết nó đã hết hạn.

🎙️
📑 Nội dung theo chương
  1. 0:39 Vì sao cần bộ nhớ đệm?
  2. 1:28 Cái giá: dữ liệu có thể đã cũ
  3. 2:14 Các tầng đệm và thứ tự xoá
  4. 3:07 Khi người dùng vẫn thấy tệp cũ
  5. 3:54 Khi nào không nên dùng bộ nhớ đệm
  6. 4:43 Câu hỏi thường gặp
🔊 Bản audio (lồng nhạc nền)

Bộ nhớ đệm là một chỗ giữ tạm bản sao của kết quả, để lần sau cần thì lấy ra ngay thay vì tính lại từ đầu. Bạn sửa rồi mà vẫn thấy bản cũ vì ở đâu đó trên đường đi, trình duyệt, mạng trung gian hay máy chủ, còn một tầng đệm đang giữ bản sao cũ và chưa biết rằng nó đã hết hạn.

Chào bạn, đây là Nhà Lập Trình. Nếu bạn đã từng sửa một dòng chữ trên trang web, tải lại mười lần vẫn thấy chữ cũ, rồi gọi đồng nghiệp sang xem thì họ lại thấy chữ mới, thì bạn đã gặp bộ nhớ đệm. Trong nghề có một câu đùa lâu đời rằng một trong những việc khó nhất của khoa học máy tính là làm cho bộ nhớ đệm biết lúc nào nó sai. Tập này kể vì sao câu đùa đó đúng.

Vì sao cần bộ nhớ đệm?

Hãy nghĩ tới một quán phở đông khách. Nếu mỗi bát lại ninh xương từ đầu, khách chờ cả ngày. Quán ninh một nồi nước dùng từ sáng sớm rồi múc ra dần. Nồi nước dùng đó là bộ nhớ đệm: làm một lần, dùng nhiều lần.

Trong máy tính cũng vậy. Tính một trang chủ có thể cần hỏi cơ sở dữ liệu nhiều lần, ghép nhiều phần lại. Nếu một nghìn người cùng vào, làm lại một nghìn lần là lãng phí. Máy chủ làm một lần, giữ kết quả, trả cho cả nghìn người.

Bộ nhớ đệm có mặt ở khắp nơi, ở mọi tầng. Bộ xử lý có bộ nhớ đệm nhỏ ngay bên trong. Ổ cứng có bộ nhớ đệm. Trình duyệt giữ ảnh và tệp đã tải. Mạng phân phối nội dung giữ bản sao trang web ở gần người dùng. Máy chủ giữ kết quả truy vấn.

Không có bộ nhớ đệm, máy tính và mạng internet ngày nay sẽ chậm đến mức khó dùng. Nó không phải một tính năng phụ, nó là xương sống của tốc độ.

Cái giá: dữ liệu có thể đã cũ

Cái giá của nồi nước dùng là nếu đầu bếp muốn đổi công thức, nồi đã ninh từ sáng vẫn là công thức cũ. Khách buổi sáng và khách buổi chiều có thể ăn hai vị khác nhau.

Bộ nhớ đệm cũng vậy. Khi dữ liệu gốc thay đổi, bản sao trong đệm không tự biết. Nó vẫn vui vẻ trả bản cũ cho tới khi hết hạn hoặc có ai đó bảo nó bỏ đi.

Đôi khi dữ liệu cũ vài phút không sao, như số lượt xem một bài viết. Đôi khi thì là thảm hoạ, như giá sản phẩm vừa đổi mà khách vẫn thấy giá cũ, đặt hàng theo giá cũ, rồi cãi nhau với nhân viên. Hoặc tệ hơn, trang cá nhân của người này bị giữ đệm và hiện ra cho người khác.

Vì vậy với mỗi thứ định đưa vào bộ nhớ đệm, người lập trình phải trả lời: dữ liệu này cũ bao lâu thì chấp nhận được, và khi dữ liệu gốc đổi thì ai có trách nhiệm báo cho đệm biết.

Các tầng đệm và thứ tự xoá

Chuyện sửa rồi vẫn thấy cũ thường không do một tầng đệm, mà do nhiều tầng chồng lên nhau. Bạn sửa mã trên máy chủ, nhưng chương trình trên máy chủ có thể giữ bản đã dịch của mã cũ trong bộ nhớ. Trang kết quả có thể được giữ ở tầng đệm của máy chủ. Mạng phân phối nội dung có bản sao riêng. Và trình duyệt của bạn cũng có bản sao.

Thứ tự xoá rất quan trọng. Nếu bạn xoá đệm ở mạng phân phối trước, rồi mới làm mới chương trình trên máy chủ, thì ngay giữa hai bước đó có thể có một người vào trang. Mạng phân phối không có bản sao, đi hỏi máy chủ, máy chủ vẫn trả bản cũ, và mạng phân phối lại giữ bản cũ đó thêm nhiều giờ nữa.

Nguyên tắc là xoá từ trong ra ngoài: tầng gần dữ liệu gốc trước, tầng gần người dùng sau. Và đợi một chút giữa các bước để chắc tầng trong đã thật sự dùng bản mới.

Mình đã thấy nhiều người mất cả buổi chiều chỉ vì xoá đúng các tầng nhưng sai thứ tự, xoá đi xoá lại mà trang vẫn cũ.

Khi người dùng vẫn thấy tệp cũ

Một tình huống rất quen: bạn sửa tệp định dạng giao diện, trên máy bạn đã đẹp, nhưng khách hàng gọi báo trang bị vỡ. Lý do là trình duyệt của khách còn giữ tệp định dạng cũ, trong khi phần khung trang đã là mới. Hai phiên bản không khớp nhau.

Bảo khách xoá bộ nhớ đệm trình duyệt là cách chữa cháy, nhưng bạn không thể gọi cho từng khách. Cách làm bài bản là mỗi lần tệp thay đổi, đổi luôn tên hoặc gắn thêm một dấu phiên bản vào đường dẫn tệp. Với trình duyệt, đó là một tệp hoàn toàn mới, nó sẽ tải về.

Cách này cho phép bạn đặt thời hạn nhớ rất dài cho những tệp không đổi, giúp trang nhanh, mà vẫn chắc chắn khách nhận bản mới ngay khi có thay đổi.

Đây là một mẹo nhỏ, nhưng nó phản ánh một cách nghĩ lớn: đừng cố làm cho bản sao cũ biến mất, hãy làm cho bản mới có một cái tên khác.

Khi nào không nên dùng bộ nhớ đệm

Người mới biết tới bộ nhớ đệm hay dùng nó để chữa mọi chỗ chậm. Trang chậm à, cho vào đệm. Nhưng bộ nhớ đệm che vấn đề chứ không sửa vấn đề. Truy vấn chậm vì thiếu chỉ mục vẫn chậm, chỉ là giờ nó chậm ít lần hơn. Và khi đệm hết hạn đúng lúc đông khách, cả trăm yêu cầu cùng lao vào truy vấn chậm đó một lúc.

Không nên đệm những gì riêng cho từng người nếu không phân tách cẩn thận. Không nên đệm những dữ liệu cần chính xác tuyệt đối tại thời điểm xem, như số dư tài khoản hay số hàng còn lại khi thanh toán.

Hãy đo trước khi đệm. Biết chỗ nào chậm, vì sao chậm, sửa được thì sửa. Chỉ khi đã sửa mà vẫn cần nhanh hơn, hoặc khi dữ liệu thật sự ít thay đổi mà được đọc rất nhiều, bộ nhớ đệm mới là công cụ đúng.

Bộ nhớ đệm giống một con dao sắc: dùng đúng thì nhanh gọn, dùng bừa thì đứt tay lúc nào không biết.

Câu hỏi thường gặp

Làm sao biết mình đang thấy bản cũ do bộ nhớ đệm?

Thử mở trang ở chế độ ẩn danh, trên thiết bị khác hoặc mạng khác. Nếu ở đó thấy bản mới, rất có thể trình duyệt của bạn đang giữ bản cũ. Nếu ở đâu cũng thấy bản cũ, tầng đệm nằm phía máy chủ hoặc mạng phân phối.

Xoá bộ nhớ đệm trình duyệt có mất dữ liệu gì không?

Xoá bộ nhớ đệm chỉ bỏ các bản sao tệp đã tải, trang sẽ tải lại lần sau. Nếu xoá cả dữ liệu trang web và thông tin đăng nhập thì bạn có thể phải đăng nhập lại.

Mạng phân phối nội dung là gì?

Là mạng lưới máy chủ đặt ở nhiều nơi, giữ bản sao nội dung trang web ở gần người dùng để tải nhanh hơn. Nó là một tầng đệm, nên khi sửa trang cần làm mới cả ở tầng này.

Vì sao không đặt bộ nhớ đệm cho mọi thứ để trang nhanh?

Vì dữ liệu có thể cũ và gây sai lệch, đặc biệt với giá cả, tồn kho, thông tin riêng tư. Đệm cũng làm việc gỡ lỗi khó hơn vì bạn không chắc mình đang thấy bản nào.

Thời hạn bộ nhớ đệm nên đặt bao lâu?

Tuỳ dữ liệu thay đổi nhanh cỡ nào và cũ bao lâu thì chấp nhận được. Tệp có dấu phiên bản có thể nhớ rất lâu, còn trang có dữ liệu thay đổi thường xuyên chỉ nên nhớ ngắn hoặc làm mới chủ động.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.