GIỚI THIỆU CƠ BẢN VỀ CACHE
🔑 ĐỊNH NGHĨA
Cache là một bộ nhớ tạm thời tốc độ cao được sử dụng để lưu trữ dữ liệu mà hệ thống có khả năng sẽ sử dụng lại trong tương lai gần.
Mục đích chính của cache là cải thiện hiệu suất hệ thống bằng cách giảm thời gian truy cập dữ liệu và giảm tải cho các nguồn dữ liệu chính (ví dụ: main memory, ổ cứng).
😍 VÍ DỤ
Ví dụ như bạn có một trang web phim tình cảm lãng mạn Nhật Bản.
-
Trên trang web này có thông tin của hàng nghìn diễn viên khác nhau.
-
Bạn có thể setup để cache thông tin của những diễn viên có nhiều người xem nhất 🌟
-
Khi đó tốc độ trả về khi người xem tìm kiếm phim của diễn viên ấy sẽ rất nhanh.
❌ KHI CHƯA CÓ CACHE
Mỗi khi trang web được load, một hoặc nhiều truy vấn Database được thực hiện để đọc dữ liệu.
Càng truy vấn nhiều tới Database thì hiệu suất của ứng dụng càng bị ảnh hưởng.
✅ KHI CÓ CACHE
Cache có thể giúp giảm thiểu vấn đề này (Nhưng không phải mọi trường hợp đều nên sử dụng cache, cụ thể mình sẽ chia sẻ ở bài viết sau)
Chúng ta có thể sử dụng cache như một lớp trung gian giữa Web Server và Database, dùng để lưu trữ dữ liệu tạm thời và nhanh hơn nhiều so với Database.
Việc này giúp cho hiệu suất hệ thống tốt hơn, giảm khối lượng công việc cho Database. Và khi cần thiết, chúng ta cũng có thể scale cache một cách độc lập.
⚙️ LUỒNG HOẠT ĐỘNG
Nhìn vào hình minh họa ở trên, các bạn có thể thấy:
1. Sau khi nhận được request từ client, Web Server sẽ kiểm tra xem dữ liệu mà client cần có sẵn trong cache hay không.
2. Nếu có thì sẽ lấy luôn dữ liệu từ cache để xử lý (nếu cần) và return cho client.
3. Nếu không thì sẽ truy vấn vào Database để lấy dữ liệu.
4. Sau khi lấy được dữ liệu từ Database rồi thì lưu lại vào trong cache để sử dụng ở lần gọi sau.
2. Rồi trả ngược lại cho Web Server xử lý (nếu cần) và return cho client.
Đây là một trong những caching strategy phổ biến, được gọi là Read-through.
Ngoài ra còn có những caching strategy khác như: Cache-aside, Refresh-ahead, Write-through, Write-behind, Write-around. Các bạn có thể search để tìm hiểu thêm.
Các caching strategy sẽ được cân nhắc sử dụng dựa trên loại dữ liệu, kích thước dữ liệu và access pattern khác nhau.
👨💻 CODE TƯƠNG TÁC VỚI CACHE SERVER
Để tương tác với các cache server thì nhìn chung khá đơn giản. Vì hầu hết các cache server đều cung cấp API cho các ngôn ngữ lập trình phổ biến.
Ví dụ Memcached API có 2 hàm set()
và get()
tương ứng với thao tác lưu dữ liệu vào cache, và lấy dữ liệu từ cache ra:
SECONDS = 1
cache.set('CACHE_KEY', 'Cache value', 3600 * SECONDS)
cache.get('CACHE_KEY')
LỜI NHẮN
Bạn có thể tham khảo thêm những bài viết trong series "System Design - Thiết kế Hệ thống" của mình trên blog này nhé. Hi vọng kiến thức này hữu ích với bạn.
Follow mình trên Facebook "CLB Lập trình - THPT Ngọc Tảo" hoặc kênh Youtube "Tờ Mờ Sáng học Lập trình" để cùng nhau học tập, chia sẻ những kiến thức công nghệ và lập trình hoàn toàn miễn phí nhé!
Facebook CLB Lập trình - THPT Ngọc Tảo: https://www.facebook.com/clb.it.ngoctao/
Youtube Tờ Mờ Sáng học Lập trình: https://www.youtube.com/@tmsangdev
Hẹn gặp lại 👋
BẠN CÓ THỂ ĐỌC THÊM
Clean Architecture: A Craftsman’s Guide to Software Structure and Design - Robert C. Martin
Designing Data – Insensitive applications - Martin Kleppmann
System Analysis and Design - Alan Dennis, Barbara Haley Wixom, Roberta M. Roth
System Design Interview - Alex Xu
Modern Systems Analysis and Design - Joseph Valacich, Joey George
Head First Design Patterns - Eric Freeman, Elisabeth Robson
All rights reserved