🌟 ĐỊNH NGHĨA VỀ CACHE
Cache là một loại bộ nhớ tạm thời, có tốc độ truy cập cao, được thiết kế để lưu trữ dữ liệu mà hệ thống có khả năng sử dụng lại trong tương lai gần. Mục tiêu chính của việc sử dụng cache là cải thiện hiệu suất của 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 như bộ nhớ chính (main memory) và ổ cứng.
📝 VÍ DỤ THỰC TIỄN VỀ CACHE
Hãy tưởng tượng bạn có một trang web chuyên cung cấp thông tin về phim tình cảm lãng mạn Nhật Bản. Trang web này sở hữu dữ liệu từ hàng nghìn diễn viên khác nhau. Bạn có thể cấu hình để cache thông tin của những diễn viên được người xem tìm kiếm nhiều nhất 🌟. Khi đó, tốc độ trả về kết quả khi người xem tìm kiếm phim của diễn viên đó sẽ rất nhanh chóng mà không tốn quá nhiều tài nguyên hệ thống.
❌ HỆ QUẢ KHI KHÔNG SỬ DỤNG CACHE
Khi không có cache, mỗi khi người dùng truy cập vào trang web, một hoặc nhiều truy vấn đến cơ sở dữ liệu (Database) sẽ được thực hiện để lấy dữ liệu. Điều này dẫn đến tình trạng tắc nghẽn khi có nhiều truy vấn, làm giảm hiệu suất của ứng dụng.
✅ LỢI ÍCH KHI CÓ CACHE
Việc sử dụng cache có thể giúp giảm thiểu các vấn đề về hiệu suất này (Tuy nhiên, không phải mọi trường hợp đều nên áp dụng cache, tôi sẽ đề cập cụ thể hơn ở 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, giúp lưu trữ dữ liệu tạm thời với tốc độ nhanh hơn nhiều lần so với việc truy cập trực tiếp vào Database. Điều này không chỉ cải thiện hiệu suất của hệ thống mà còn giúp giảm tải công việc cho Database. Ngoài ra, bạn có thể mở rộng cache mà không cần ảnh hưởng đến Database.
⚙️ QUY TRÌNH HOẠT ĐỘNG CỦA CACHE
Quy trình hoạt động của cache có thể được mô tả qua các bước sau:
- Sau khi nhận được yêu cầu từ client, Web Server sẽ kiểm tra xem dữ liệu mà client cần có sẵn trong cache hay không.
- Nếu dữ liệu có sẵn trong cache, Web Server sẽ lấy trực tiếp dữ liệu từ cache để xử lý và trả về cho client.
- Nếu không có, Web Server sẽ thực hiện truy vấn đến Database để lấy dữ liệu cần thiết.
- Sau khi nhận được dữ liệu từ Database, dữ liệu đó sẽ được lưu vào cache để sử dụng cho lần gọi sau.
Đây là một trong những chiến lược cache phổ biến, được gọi là Read-through. Ngoài ra, còn có nhiều chiến lược khác như: Cache-aside, Refresh-ahead, Write-through, Write-behind, và Write-around. Bạn có thể tìm hiểu thêm về các chiến lược này để áp dụng cho từng loại dữ liệu, kích thước dữ liệu cũng như mẫu truy cập khác nhau.
👨💻 HƯỚNG DẪN TƯƠI TÁC VỚI CACHE SERVER
Để tương tác với các cache server, bạn sẽ thấy rằng điều này khá đơn giản. 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ụ với Memcached, bạn có thể sử dụng các hàm set()
và get()
để tương ứng với việc lưu dữ liệu vào cache và lấy dữ liệu từ cache:
python
SECONDS = 1
cache.set('CACHE_KEY', 'Giá trị cache', 3600 * SECONDS)
cache.get('CACHE_KEY')
LỜI KẾT
Tôi hy vọng bài viết này giúp bạn hiểu hơn về hoạt động của cache trong lập trình. Bạn có thể tham khảo thêm các bài viết trong series "Thiết Kế Hệ Thống" của tôi trên blog để nắm vững hơn về các khái niệm liên quan. Hãy theo dõi tôi trên Facebook tại "CLB Lập Trình - THPT Ngọc Tảo" hoặc trên kênh YouTube "Tờ Mờ Sáng học Lập trình" để cùng nhau học hỏi và chia sẻ kiến thức công nghệ và lập trình miễn phí nhé!
Facebook CLB Lập Trình - THPT Ngọc Tảo: Link Facebook
Youtube Tờ Mờ Sáng học Lập trình: Link Youtube
Hẹn gặp lại bạn trong các bài viết sau! 👋
TÀI LIỆU THAM KHẢO
- 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
source: viblo