Cache và Ứng dụng

Hôm nay chúng ta sẽ cùng nhau tìm hiểu chủ để về Cache và ứng dụng.
Mục tiêu qua bài này chúng ta sẽ hiều được:

  1. Cache là gì?
  2. Những giá trị và thách thức khi sử dụng Cache?
  3. Cơ chế hoạt động như thế nào?
  4. Triển khai trong ứng dụng
    • Bao giờ thì dùng Cache?
    • Lưu trữ Cache ở đâu?
    • Sử dụng Cache như thế nào cho hợp lý

I. Cache là gì:

Cache (bộ nhớ đệm) là một cơ chế lưu trữ tạm các dữ liệu để cải thiện tốc độ truy xuất và hiệu suất (performance) của hệ thống. Dữ liệu được lưu trữ trong cache thường là các kết quả từ các lần truy vấn trước đó hoặc các dữ liệu tính toán mà tốn nhiều thời gian để tạo ra.

II. Những giá trị và thách thức khi sử dụng Cache

Dưới đây là những giá trị to lớn mà Cache mang lại

Tăng hiệu suấtGiảm thời gian phản hồi của ứng dụng bằng cách cung cấp dữ liệu nhanh chóng.
Giảm tải máy chủGiảm số lượng yêu cầu tới cơ sở dữ liệu hoặc các dịch vụ backend.
Cải thiện trải nghiệm người dùngTốc độ tải trang nhanh hơn và phản hồi mượt mà hơn.
những lợi ích Cache mang lại

Bên cạnh những lợi ích thì chúng ta phải quan tâm tới những thách thức, khó khăn khi sử dụng Cache

Đồng bộ dữ liệuĐảm bảo dữ liệu trong cache luôn đồng bộ với dữ liệu nguồn gốc.
Quản lý dung lượng CacheSử dụng các thuật toán quản lý dung lượng như LRU (Least Recently Used), TTL (Time To Live) để xóa dữ liệu cũ hoặc ít sử dụng.
Những thách thức, khó khăn và cách khắc phục

III. Cơ chế hoạt động

Cache Hit vs. Cache Miss:

  • Cache Hit: Dữ liệu được tìm thấy trong cache
  • Cache Miss: Dữ liệu không có trong cache, cần truy vấn từ nguồn gốc

Expiration Policy (Chính sách hết hạn )

  • Time-to-Live (TTL)
  • Least Recently Used (LRU)
  • First In, First Out (FIFO)

IV. Triển khai trong ứng dụng

Chắc hẳn đây là phần quan trọng nhất trong bài này rồi. ace đã biết các tác dụng to lớn từ Cache mang lại, vậy thì dùng nó như thế nào cho hiệu quả?

1. Xác định khi nào thì nên dùng và khi nào thì không nên dùng Cache.

Khi nào nên sử dụng cache:

  • Dữ liệu ít thay đổi thường xuyên (thông tin config system, geo location, thông tin profile ..)
  • Dữ liệu thường xuyên được truy cập nhiều lần trong khoảng thời gian ngắn ( dữ liệu trang chủ, thống kê theo ngày …)
  • Api có đỗ trễ cao (api gọi tới các dịch vụ bên ngoài (third-party services) … )

Khi Không Nên Sử Dụng Cache

  • Dữ liệu thay đổi thường xuyên ( thông tin thời gian thực, dữ liệu người dùng cập nhật thường xuyên, thông tin tài chính … )
  • Dữ liệu nhạy cảm ( dữ liệu bảo mật cao password, token, … )

2. Lưu trữ ở đâu

Client-side Cache

– Trình duyệt (browser cache) 

– Ứng dụng di động

=> Lưu trữ trên phía người dùng.

Giúp tăng tốc độ tải trang và giảm băng thông mạng.

Server-side Cache

– Lưu trữ trên máy chủ, ví dụ như in-memory cache (Redis, Memcached). 

– Giảm tải lượng truy cập cơ sở dữ liệu (Database) và cải thiện hiệu suất (performance) của ứng dụng

Distributed Cache

– Sử dụng trong các hệ thống phân tán, nơi nhiều máy chủ cần truy cập vào cùng một bộ nhớ đệm (Redis Cluster). 

– Đảm bảo dữ liệu cache được đồng bộ hóa và nhất quán trên nhiều máy chủ.

3. Các bước triển khai

Xác định nhu cầu:

– Phân tích: Xác định các phần của ứng dụng có thể hưởng lợi từ việc sử dụng cache (ví dụ: dữ liệu ít thay đổi, dữ liệu truy cập thường xuyên).

– Đánh giá: Đánh giá tác động của việc thêm cache vào các phần này, bao gồm hiệu suất, độ phức tạp và tính nhất quán.

Lựa chọn cache

Lựa chọn cache để phù hợp với định dạng dữ liệu Client-side, Server-side

Cấu hình cache

– TTL (Time to Live): Đặt thời gian sống cho các mục trong cache để chúng tự động hết hạn và được làm mới.

– Cache Eviction Policies: Least Recently Used (LRU), First In, First Out (FIFO)

– Replication: Cấu hình việc sao chép dữ liệu cache để đảm bảo tính sẵn sàng cao (Redis Master-Slave)

Triển khai cache

– Cache chủ động (Preloading):

Dữ liệu được tải và lưu trữ vào cache trước khi có bất kỳ yêu cầu nào từ người dùng hoặc hệ thống.

Đảm bảo rằng dữ liệu quan trọng và thường xuyên được truy cập luôn sẵn sàng trong cache, giảm thiểu độ trễ và tăng hiệu suất truy xuất dữ liệu.

– Cache thụ động  (Lazy loading):

Dữ liệu chỉ được tải và lưu trữ vào cache khi có yêu cầu truy cập từ người dùng hoặc ứng dụng. 

Khác với cache chủ động, cache thụ động không tải trước dữ liệu mà chỉ cache những dữ liệu đã được truy cập.

Related Posts