Tổng quan

Sau khi đã tối ưu Network, Thread Pool, Query, Database, Concurrency — bước tiếp theo là Caching.

Lưu dữ liệu ở nơi gần người dùng hơn để tránh truy cập tài nguyên chậm (Database, Service, Network) nhiều lần.


Kiến trúc tổng thể

                           User
                             │
                             ▼
                   Browser Cache
                             │
                             ▼
               Reverse Proxy / CDN
             (Static Content Cache)
                             │
                             ▼
                  Web Application
                             │
                     Session Cache
                  (Dynamic - Per User)
                             │
                             ▼
                        Services
                             │
                     Object Cache
                 (Dynamic - Shared)
                             │
                             ▼
                        Database

Không chỉ có Redis — có rất nhiều tầng cache:

  • Browser Cache
  • CDN Cache
  • Reverse Proxy Cache
  • Session Cache
  • Object Cache
  • Database Buffer Cache

Nguyên tắc của Cache

Muốn cache hiệu quả, dữ liệu phải thỏa mãn:

Frequently Read  +  Rarely Updated  =  Cache

Đọc nhiều – Ghi ít.

Ví dụ: Logo công ty tải 5 triệu lần/ngày nhưng 6 tháng mới thay đổi → cache cực kỳ hiệu quả.


1. Object Cache (Service Cache)

Cache ở tầng Service, dùng chung cho tất cả người dùng.

Không có cache

Client → Service → Database → Service → Client

Mỗi request đều xuống Database.

Có Object Cache

                 Client
                    │
                    ▼
                 Service
                    │
          ┌─────────┴─────────┐
          │                   │
     Cache Hit            Cache Miss
          │                   │
          ▼                   ▼
      Return             Database
                              │
                              ▼
                       Save Cache
                              │
                              ▼
                           Return

Cache Hit → không cần truy cập Database.

Dữ liệu phù hợp

  • Product, Category, Configuration
  • Country List, Currency, Permission

Ví dụ: GET /products/10 được đọc 100.000 lần nhưng chỉ sửa 2 lần/ngày → rất phù hợp cache.

Đặc điểm

              Object Cache

        Product #1
        Product #2
        Product #3

      Shared By Everyone

Dữ liệu không phụ thuộc User → một bản cache dùng chung cho tất cả.


2. Session Cache

Cache theo từng User, không thể dùng chung.

Ví dụ: Shopping Cart

User A: iPhone, MacBook
User B: Samsung TV

Kiến trúc

                  Web Application
                         │
               ┌─────────┴─────────┐
               │                   │
               ▼                   ▼
        Session A Cache     Session B Cache
               │                   │
            User A             User B

Dữ liệu phù hợp

  • Shopping Cart, User Profile, User Preference
  • Dashboard, Notification Count

Dynamic Data vẫn có thể cache

Dữ liệu thay đổi không có nghĩa là không cache được.

Ví dụ: User Profile thay đổi 1 lần/tuần, trong thời gian đó có 1.000 request → cache rất đáng giá.

Khi nào KHÔNG nên cache

Update Too Frequently → Don't Cache

Ví dụ: Bitcoin Price (thay đổi mỗi giây), CPU Usage (thay đổi 100ms) → cache gần như vô nghĩa.


3. Static Content Cache

Cache hiệu quả nhất — dữ liệu không thay đổi thường xuyên.

Nội dung: CSS, JS, Logo, Font, Image, Video, HTML tĩnh.

Kiến trúc Reverse Proxy Cache

             Browser
                │
                ▼
        Reverse Proxy (Nginx)
          /logo.png
          /style.css
          /main.js
                │
                ▼
        Web Application

GET logo.png → Reverse Proxy trả ngay, không gọi Backend.

Lợi ích: Không tiêu tốn CPU, Memory, Thread, Database của Application.

CDN Cache

Browser → CDN → Origin Server

logo.png → CDN trả, Origin không cần xử lý.

Browser Cache

First Request:   Browser → Server → Image → Browser Cache
Second Request:  Browser → Local Cache → Done

Lần sau không cần Internet.


Các vị trí Cache trong hệ thống

                        User
                          │
                          ▼
                 Browser Cache
                          │
                          ▼
                    CDN Cache
                          │
                          ▼
          Reverse Proxy Cache
                          │
                          ▼
                Web Application
                          │
                    Session Cache
                          │
                          ▼
                     Object Cache
                          │
                          ▼
                       Database

Cache càng gần User → Latency càng thấp.


Static vs Dynamic Cache

Static Cache Dynamic Cache
Image User Profile
CSS Shopping Cart
JS Session
Font Dashboard
HTML Product Detail
Logo Permission

Object Cache vs Session Cache

Object Cache Session Cache
Shared Theo User
Service Layer Web Layer
Product Shopping Cart
Country User Dashboard
Currency Notification

Tổng kết

                     Caching Architecture

                               User
                                │
                ┌───────────────┴───────────────┐
                ▼                               ▼
        Browser Cache                   CDN Cache
                │                               │
                └───────────────┬───────────────┘
                                ▼
                  Reverse Proxy Cache
                   (Static Content)
                                │
                                ▼
                    Web Application
                                │
                     Session Cache
                  (Dynamic - User)
                                │
                                ▼
                         Service Layer
                                │
                         Object Cache
                 (Dynamic - Shared Data)
                                │
                                ▼
                           Database

Quy tắc quan trọng nhất

Read Frequently
        +
Update Infrequently
        =
Good Candidate for Cache
  • Object Cache: lưu dữ liệu dùng chung (Product, Category, Configuration).
  • Session Cache: lưu dữ liệu riêng theo User (Shopping Cart, User Profile).
  • Static Content: cache càng gần User càng tốt (Browser → CDN → Reverse Proxy).

Dữ liệu càng được đọc nhiều và thay đổi càng ít thì lợi ích từ cache càng lớn, giúp giảm tải cho application và database, đồng thời cải thiện đáng kể thời gian phản hồi của hệ thống.