Nhắc đến hệ thống lưu trữ dữ liệu trong bộ nhớ không thể không kể đến Memcached và Redis. Trong bài viết dưới đây, BKHOST sẽ so sánh Memcached và Redis để bạn có lựa chọn hợp lý.
Khái niệm về Memcached và Redis
Để xử lý một lượng dữ liệu lớn đòi hỏi phải có các cache để tăng hiệu suất làm việc của hệ thống. Memcached và Redis được lựa chọn để làm nhiệm vụ đó. Memcached là một cache phân tán được thiết kế khá đơn giản nên rất dễ sử dụng. Trong khi đó điểm nổi bật của Redis là tích hợp đa dạng các tính năng và lưu trữ hầu hết các loại dữ liệu trong bộ nhớ.
Điểm tương đồng giữa Memcached và Redis
Memcached với Redis đều hoạt động tích cực với vai trò là những cache cho hệ thống. Hãy dùng chúng tôi điểm qua một vài nét tương đồng của hai công cụ này:
- Độ trễ dưới một phần nghìn giây: thời gian phản hồi ở cả Memcached và Redis đều dưới mili giây.
- Phân vùng dữ liệu: phân phối dữ liệu qua nhiều nút là đặc điểm chung mà cả Memcached với Redis đều sở hữu.
- Ngôn ngữ lập trình: những ngôn ngữ lập trình phổ biến như Java, Python, JavaScript, C và Ruby đều được cả Memcached với Redis hỗ trợ.
- Xóa bộ nhớ đệm: cả Memcached với Redis đều cho phép xóa bộ nhớ cache. Cụ thể Memcached xóa bằng lệnh flush _ all còn Redis lại dùng lệnh FLUSHDB hoặc FLUSHALL.
- Mở rộng quy mô: cả hai công cụ đều có khả năng mở rộng khi nhu cầu xử lý dữ liệu tăng lên.
Điểm khác biệt giữa Memcached và Redis
Mặc dù có những điểm tương đồng nhưng Memcached và Redis vẫn sở hữu nét riêng phù hợp với những đối tượng người dùng khác nhau, cụ thể:
Command-Line
Bằng cách kết nối server qua Telnet, Memcached cho phép chúng ta chạy các lệnh sau:
{{EJS0}}
{{EJS1}}
Khác với Memcached, dòng lệnh chuyên dụng redis-cli sẽ đi kèm với Redis để cho phép chúng ta thực hiện các lệnh:
{{EJS2}}
Disk I/O Dumping
Việc kết xuất đĩa ở Memcached phải có sự hỗ trợ của một số công cụ thuộc bên thứ ba chẳng hạn như memcached-dd hoặc libmemcached-tools. Riêng với Redis thì không cần bất cứ sự can thiệp nào vì bộ nhớ đệm này có cơ chế mặc định cấu hình cao cho phép kết xuất đĩa dễ dàng. Đặc điểm này mang lại lợi ích lớn cho lưu trữ và khôi phục.
Để chụp nhanh dữ liệu trong bộ nhớ khi bạn sử dụng dòng lệnh chuyên dụng redis-cli hãy thực hiện lệnh SAVE đồng bộ:
{{EJS3}}
Lúc này file nhị phân dump.rdb chứa lệnh lưu trữ ảnh chụp nhanh sau đó hiển thị OK khi hoàn tất.
Khi bắt đầu quá trình nền của thao tác chụp ảnh nhanh bạn cần thực thi lệnh BGSAVE:
{{EJS4}}
Bên cạnh đó để kiểm tra thời gian Unix của ảnh chụp nhanh DB hoàn thành gần nhất bạn hãy dùng lệnh LASTSAVE:
{{EJS5}}
Cấu trúc dữ liệu
Các cặp key – value được Memcached lưu trữ dưới dạng chuỗi và quy định giới hạn kích thước 1MB cho mỗi value. Redis lưu trữ đa dạng các loại dữ liệu với những kiểu dữ liệu phong phú ví dụ như list, set, hash và kích thước của value lên đến con số 512MB.
Replication (Nhân rộng)
Memcache cho phép copy bởi các nhánh của bên thứ ba chẳng hạn như với repcached. Trong khi đó với Redis chúng ta có thể nhân rộng các cụm khi tái tạo bộ nhớ chính. Để làm được điều này đầu tiên hãy tạo bản sao của server Redis bằng lệnh REPLICAOF. Sau đó dùng lệnh PSYNC trên bản sao để bắt đầu copy từ bản chính.
Transactions (Giao dịch)
Các giao dịch không được Memcached hỗ trợ. Ngược lại các giao dịch lại được Redis cung cấp out-of-the-box để thực hiện các lệnh. Bạn có thể dùng lệnh MULTI để bắt đầu giao dịch. Những lệnh tiếp theo được thực hiện bằng cách sử dụng lệnh EXEC. Cuối cùng lệnh XEM được Redis cung cấp để những giao dịch có điều kiện được triển khai.
Publish và Subscribe Messaging
Publish, Subscribe Messaging không được Memcached hỗ trợ. Trong khi đó Redis lại cung cấp chức năng này bằng cách sử dụng hàng đợi thông báo pub/sub. Những lệnh chuyên dụng như PUBLISH, SUBSCRIBE, UNSUBSCRIBE để xuất bản, đăng ký, hủy đăng ký…
Hỗ trợ không gian địa lý
Hỗ trợ không gian địa lý là chức năng mà các bộ nhớ đệm cần có để triển khai các tính năng dựa trên vị trí cho các ứng dụng. Khác với Memcached, Redis có rất nhiều lệnh đi kèm như GEODIST, GEORADIUS để quản lý dữ liệu không gian địa lý theo thời gian thực.
Kiến trúc
Redis chỉ dùng một core, nếu so sánh với Memcached trong việc lưu trữ các tập dữ liệu nhỏ thì hiệu suất hoạt động tốt hơn. Memcached lại sử dụng nhiều core và có khả năng lưu trữ lượng dữ liệu lớn. Vì thế xét trên lượng dữ liệu tổng thể thì Memcached lại vượt trội hơn Redis.
LUA Scripting
Không giống như Memcached, Redis cung cấp các lệnh như EVAL, SCRIPT, LOAD để thực thi các tập lệnh LUA. Ví dụ để đánh giá tập lệnh bạn có thể thực hiện lệnh EVAL:
{{EJS6}}
Sử dụng bộ nhớ
Khi so sánh cấu trúc dữ liệu dạng key – value thì Memcached có tỷ lệ sử dụng bộ nhớ cao hơn Redis. Tuy nhiên, với cấu trúc dữ liệu dạng hash thì Redis lại hiệu quả hơn Memcached.
Tổng kết
Bài viết trên chúng tôi đã so sánh Memcached vs Redis để bạn thấy rõ những điểm tương đồng và khác biệt giữa chúng. Hy vọng qua việc xem xét những tính năng của các bộ nhớ đệm nói trên bạn sẽ có lựa chọn đúng đắn cho từng trường hợp.
Nếu còn gặp bất cứ vướng mắc gì về nội dung bài viết trên, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.