Trước tiên muốn trả lời cho câu hỏi trên ta sẽ tìm hiểu về Bộ nhớ đệm. Bộ nhớ đệm là một bước quan trọng trong việc tăng hiệu năng của nhiều ứng dụng. Khó có thể nói bộ nhớ đệm nào là tốt nhất nhưng ta có thể thấy hai ứng cử viên có khả năng thường xuyên xuất hiện trong quá trình tìm kiếm câu trả lời là Redis vs Memcached. Hãy cùng xem chúng khác biệt gì nhé.
Redis là gì?
Redis = Remote Dictionary Server
Dịch nôm na nó là 1 máy chủ lưu trữ dạng từ điển. Dạng từ điển là như nào ? Nó là kiểu bạn muốn tìm nghĩa của từ “xxx” thì bạn sẽ tìm trong từ điển từ đó ứng với nghĩa gì. VD: xxx: xem xong xoá.
Giải thích theo tech thì nó là 1 thứ dùng RAM để lưu trữ dữ liệu theo kiểu cặp key – value. Mỗi key sẽ trỏ đến 1 giá trị tương ứng. Hiểu đơn giản là vậy. Redis có nhiều kiểu data như là: List, Sets và Hashes, … ( tham khảo thêm tại đây )
Chính vì redis dùng RAM để lưu trữ nên nó có tốc độ truy xuất rất nhanh. Ấy nên nó luôn là một trong những sự lựa chọn hàng đầu khi ứng dụng của chúng ta cần truy xuất và nhận về data với tốc độ cao.

Memcached là gì?
Memcached là một mã nguồn mở miễn phí về hệ thống bộ nhớ đệm đối tượng phân tán. Tương tự như Redis, Memcached cũng lưu trữ dưới dạng cặp key – value trong bộ nhớ RAM nên cũng có tốc độ truy xuất cực kỳ nhanh. Điều này khiến cho Memcached là một lựa chọn khác cho phép trả về data với tốc độ cao. Memcached cũng là đa luồng, nghĩa là hiệu năng có thể được cải thiện đáng kể khi ứng dụng chạy trên nhiều cores.

Điểm chung của Redis và Memcached
Chúng đều là cơ sở dữ liệu dựa trên bộ nhớ và thường được sử dụng làm bộ nhớ đệm. Khi tính đồng thời cao, và hiệu suất muốn cải thiện thì tốt nhất nên quan tâm đến hai thằng này.
- Cả hai đều có một chiến lược đó là tự động hết hạn.
- Hiệu suất của cả hai đều rất cao.
Chỉ đơn giản vậy thôi.
Sự khác biệt giữa Redis và Memcached
Sau đây tôi sẽ liệt kê đầy đủ sự khác biệt giữa chúng:
- Redis hỗ trợ nhiều loại dữ liệu hơn (String, Hash, List, Set, ZSet), trong khi Memcached chỉ hỗ trợ loại dữ liệu key-value là loại đơn giản nhất.
- Redis hỗ trợ lưu giữ dữ liệu và có thể giữ dữ liệu trong bộ nhớ trên đĩa. Nó có thể được tải lại để sử dụng khi khởi động lại hay còn gọi khi server đột ngột crash. Tuy nhiên, Memcached không có chức năng lưu giữ dữ liệu. Tất cả dữ liệu được lưu trong bộ nhớ. Sau khi Memcached khởi động lại hoặc treo máy , dữ liệu sẽ bị mất.
- Redis vốn hỗ trợ chế độ cluster, nhưng Memcached không có chế độ cụm gốc và cần dựa vào ứng dụng client để ghi dữ liệu vào các phân đoạn trong cluster.
- Redis hỗ trợ mô hình pub/sub (đăng ký xuất bản), tập lệnh Lua, giao dịch và các chức năng khác, nhưng Memcached không hỗ trợ những cái ở trên.
- Chiến lược dọn rác dữ liệu dư thừa hay chủ động trên Redis có hai hình thức: xóa lười (lazy) và xóa thường xuyên , trong khi Memcached chỉ sử dụng xóa lười (lazy) làm chiến lược xóa dữ liệu đã hết hạn.
Trình bày thêm về hai chiến lược dọn rác này thêm cho mọi người…
Xóa lười (lazy): Khi một key được set với chiến lược này, nó sẽ được đánh dấu là đã hết hạn (sử dụng cơ chế hẹn giờ hoặc tác vụ theo lịch trình để phát hiện các khóa hết hạn và đánh dấu trạng thái), thao tác xóa sẽ chỉ được thực hiện khi khóa được truy cập. Chiến lược này tiết kiệm tài nguyên CPU vì việc xóa chỉ xảy ra khi cần thiết. Tuy nhiên, nếu một key
hết hạn mà không được truy cập, nó sẽ tiếp tục tồn tại trong bộ nhớ cho đến khi được truy cập.
Xóa thường xuyên: Redis thường xuyên quét cấu trúc dữ liệu nội bộ của mình để kiểm tra xem có khóa nào đã hết hạn hay không và thực hiện các thao tác xóa. Chiến lược này có thể đảm bảo rằng các khóa hết hạn sẽ bị xóa kịp thời, nhưng nó có thể gây lãng phí tài nguyên CPU vì thao tác xóa đòi hỏi thêm thời gian CPU.
Kết luận
Trên đây là câu trả lời cho câu hỏi điều khác biệt giữa redis và Memcached.