In-Memory Caching với Redis

BinlerdevBinlerdev
4 min read

1. Mở đầu – Khi tốc độ là tất cả

Hãy tưởng tượng bạn đang chơi một game online. Mỗi lần nhân vật của bạn di chuyển, game lại phải “hỏi” server dữ liệu về vị trí bản đồ, trạng thái nhân vật, kẻ địch… Nếu server phải tìm thông tin đó trong ổ cứng mỗi lần, bạn sẽ thấy game giật lag khó chịu.

Giải pháp? Lưu sẵn những thông tin hay dùng vào bộ nhớ tạm (RAM) – nơi tốc độ đọc/ghi nhanh hơn gấp hàng trăm lần so với ổ cứng. Trong lập trình web hay hệ thống lớn, kỹ thuật này gọi là caching. Và một trong những công cụ mạnh mẽ nhất để làm việc này là Redis.


2. Redis và In-Memory Caching là gì?

2.1. Redis là gì?

Redis là một cơ sở dữ liệu dạng key-value (dữ liệu lưu theo cặp khóa – giá trị) hoạt động chủ yếu trong RAM. Điều này giúp nó cực kỳ nhanh. Bạn có thể tưởng tượng Redis như một tủ đồ siêu tốc ngay trong phòng làm việc của bạn, thay vì phải chạy xuống kho tìm đồ mỗi lần.

Ví dụ:

  • Trong lập trình: Lưu thông tin đăng nhập người dùng sau khi họ vừa login, để không phải truy vấn cơ sở dữ liệu mỗi lần họ tải trang mới.
  • Trong đời sống: Viết số điện thoại của người thân ra giấy để trên bàn thay vì mỗi lần cần lại mở danh bạ.

2.2. In-Memory Caching là gì?

“In-Memory” nghĩa là lưu dữ liệu trực tiếp trong bộ nhớ RAM, không cần qua ổ cứng. “Caching” là việc lưu trữ tạm dữ liệu để dùng lại sau. Kết hợp lại: In-Memory Caching = lưu tạm dữ liệu trong RAM để truy xuất nhanh hơn.


3. Tại sao lại cần caching?

Nếu mỗi lần có người dùng truy cập web, bạn đều phải:

  1. Nhận request.
  2. Truy vấn database (ổ cứng) → chậm.
  3. Xử lý dữ liệu.
  4. Trả kết quả.

Thì hệ thống sẽ chậm dần khi lượng người truy cập tăng.

Caching giúp bạn bỏ qua bước 2 nếu dữ liệu đã có sẵn trong RAM.

💡 Ví dụ thực tế:

  • Website bán vé máy bay: Thay vì truy vấn giá vé mỗi lần người dùng tìm kiếm, server lưu kết quả tìm gần nhất trong cache vài phút.
  • Ứng dụng học online: Lưu danh sách bài học của người dùng trong cache, tránh đọc lại từ DB mỗi lần mở app.

4. Redis hoạt động thế nào khi caching?

4.1. Quy trình cơ bản

  1. Người dùng yêu cầu dữ liệu.
  2. Hệ thống kiểm tra cache trong Redis.

    • Nếu → trả về ngay.
    • Nếu không → truy vấn DB → lưu kết quả vào cache → trả về cho người dùng.
[Người dùng] → [Redis Cache?] → (Có) → Trả kết quả  
                                 (Không) → [Database] → [Redis Cache] → Trả kết quả

4.2. TTL – Thời gian sống của dữ liệu

Dữ liệu trong cache không nên tồn tại mãi, vì có thể bị cũ. Redis cho phép bạn đặt TTL (Time To Live) – sau khoảng thời gian này, dữ liệu sẽ bị xóa khỏi cache.

Ví dụ:

  • Giá vàng: TTL 1 phút.
  • Hồ sơ người dùng: TTL vài giờ.

4.3. Ví dụ code với Redis (Node.js)

// Kết nối Redis
const redis = require("redis");
const client = redis.createClient();

async function getUserData(userId) {
    // 1. Kiểm tra cache
    const cachedData = await client.get(`user:${userId}`);
    if (cachedData) {
        console.log("Lấy từ cache");
        return JSON.parse(cachedData);
    }

    // 2. Nếu không có, lấy từ DB (ví dụ giả lập)
    const userData = { id: userId, name: "Nguyễn Văn A" };

    // 3. Lưu vào cache với TTL = 3600 giây (1 giờ)
    await client.setEx(`user:${userId}`, 3600, JSON.stringify(userData));

    console.log("Lấy từ DB");
    return userData;
}

5. Khi nào KHÔNG nên dùng caching?

  • Dữ liệu thay đổi liên tục: Nếu dữ liệu thay đổi mỗi giây (ví dụ: số dư ngân hàng), cache có thể làm người dùng thấy thông tin cũ.
  • Dữ liệu quá lớn: RAM có giới hạn, nếu lưu toàn bộ dữ liệu, hệ thống có thể bị “nghẹt thở”.

6. Thử thách nhỏ cho bạn

  • Bạn hãy nghĩ: Trong một ứng dụng mạng xã hội, những loại dữ liệu nào nên lưu cache, những loại nào không nên?
  • Nếu TTL quá ngắn hoặc quá dài sẽ gây ra vấn đề gì?

7. Kết luận

Redis và In-Memory Caching là vũ khí bí mật giúp hệ thống nhanh hơn, chịu tải tốt hơn. Tuy nhiên, dùng cache cũng cần cân nhắc thời gian sống của dữ liệu và bộ nhớ sẵn có.

💡 Kinh nghiệm cá nhân: Khi mới học, mình thường “cache mọi thứ”. Nhưng sau vài lần hệ thống trả dữ liệu sai do cache cũ, mình nhận ra: Cache là con dao hai lưỡi – cần dùng đúng cách.


8. Tài liệu tham khảo

0
Subscribe to my newsletter

Read articles from Binlerdev directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Binlerdev
Binlerdev