Redis và Memcached sự khác biệt là gì?

Nội dung bài viết

Video học lập trình mỗi ngày

Đây là một câu hỏi nằm trong Series: Những câu hỏi phỏng vấn Backend phần Redis. Mà tôi đang biên soạn chúng. Nếu nhưng anh chị quan tâm thì có thể follow chúng để có thể có được tin sớm nhất.

RedisMemcached trong ứng dụng hiện nay, và cũng có nhiều kịch bản để áp dụng.) vốn dĩ rất thân thuộc với nhiều lập trình viên backend, 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 (cache) trong ứng dụng hiện nay, và cũng có nhiều kịch bản để áp dụng.

Trong bài viết này anonystick sẽ nói về những sự khác biệt giữa chúng. Nhưng trước tiên chúng ta nên xem giữa chúng có điểm chung nào?

Đ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.

  1. Cả hai đều có một chiến lược đó là tự động hết hạn.
  2. 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. Ngoài ra anh chị cũng có thể xem cách hoạt động kịch bản của các dữ liệu trong github anonystick.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Để nói thêm về hai chiến lược dọn rác này thêm cho anh chị...

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.

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..

Có thể bạn đã bị missing