Redis viết tắt của RE vi trần DI ctionary S erver, được tạo ra vào năm 2009 bởi Salvatore Sanfilippo. Mặt khác, Memcached được tạo ra vào năm 2003 bởi Brad Fitzpatrick. Cả Redis và Memcached đều là:
- Cấu trúc dữ liệu trong bộ nhớ NoSQL
- Được viết bằng C
- Mã nguồn mở
- Được sử dụng để tăng tốc ứng dụng
- Hỗ trợ độ trễ dưới mili giây
Vào năm 2014, Salvatore đã viết một bài đăng xuất sắc trên StackOverflow về việc sử dụng Memcached có ý nghĩa hơn Redis. Trong bài đăng này, chúng tôi cung cấp so sánh hiện tại và chi tiết giữa Redis và Memcached để bạn có thể đưa ra lựa chọn sáng suốt về việc sử dụng chúng trong ứng dụng của mình.
Đồ họa thông tin
Bài đăng này đã được cô đọng trong đồ họa thông tin dưới đây. Với đồ họa thông tin này, bạn có thể dễ dàng hình dung kết quả của phép so sánh này để xem cái nào xuất hiện trên đầu trong các tình huống khác nhau. Nếu bạn muốn đọc bản so sánh ở định dạng văn bản, hãy nhấp vào đây.
Tài liệu
Để bắt đầu, Redis được ghi lại toàn diện hơn nhiều so với Memcached. Điều này giúp việc tìm hiểu, quản lý và sử dụng dễ dàng hơn.
Mô hình cơ sở dữ liệu
Redis chủ yếu là một kho lưu trữ giá trị quan trọng. Trong khi các khóa là các chuỗi nhị phân, lợi thế với Redis là giá trị không bị giới hạn chỉ với các chuỗi nhị phân. Chúng có thể là nhiều cấu trúc dữ liệu cho phép lưu trữ các đối tượng phức tạp và cung cấp một tập hợp các thao tác phong phú trên chúng. Redis cũng cung cấp khả năng mở rộng thông qua các mô-đun Redis. Mô-đun Redis là phần mở rộng cung cấp cấu trúc dữ liệu bổ sung và các tính năng không có sẵn trong bộ tính năng cốt lõi. Dưới đây là ví dụ về một số tính năng hiện có sẵn dưới dạng mô-đun:
- Kho tài liệu
- Biểu đồ DBMS
- Công cụ tìm kiếm
- DBMS chuỗi thời gian
Memcached là một kho lưu trữ giá trị khóa thuần túy chỉ hỗ trợ các chuỗi nhị phân dưới dạng giá trị.
Cấu trúc dữ liệu
Như đã đề cập ở trên, Redis cung cấp nhiều kiểu cấu trúc dữ liệu cho phép nó cực kỳ linh hoạt để sử dụng, bao gồm Chuỗi, Hàm băm, Danh sách, Bộ, Bộ được sắp xếp, Bản đồ bit, Trường bit, HyperLogLog, Chỉ mục không gian địa lý và Luồng. Bạn có thể tìm hiểu thêm về những điều này trong bài viết Các trường hợp sử dụng Redis hàng đầu theo Loại cấu trúc dữ liệu cốt lõi này.
Nguồn ảnh:https://redislabs.com/redis-enterprise/data-structures/
Memcached chỉ hỗ trợ các chuỗi nhị phân thuần túy, rất tốt cho dữ liệu chỉ đọc, vì vậy nếu bạn không cần tất cả các chuông và còi của Redis, Memcached là cơ sở dữ liệu đơn giản hơn cho bạn để sử dụng.
Xếp hạng &mức độ phổ biến của cơ sở dữ liệu
Cơ sở dữ liệu ngày càng phổ biến dẫn đến cộng đồng người dùng lớn hơn, nhiều cuộc thảo luận và hướng dẫn do người dùng tạo cũng như nhiều trợ giúp và hỗ trợ hơn thông qua các công cụ của bên thứ ba như nền tảng DBaaS và các công cụ phân tích để giúp tối ưu hóa việc triển khai của bạn.
Redis là cơ sở dữ liệu phổ biến thứ 8 trên thế giới tính đến tháng 2 năm 2021, theo DB-Engines vì tính đơn giản, cấu trúc dữ liệu phong phú và tài liệu tuyệt vời. Memcached hiện được xếp hạng là cơ sở dữ liệu phổ biến thứ 28. Khi Redis và Memcached được xếp hạng theo mô hình cơ sở dữ liệu khóa-giá trị, Redis đứng ở vị trí thứ nhất và Memcached đứng thứ 4. Tuy nhiên, nếu bạn chỉ tìm kiếm cơ sở dữ liệu mã khóa-giá trị mở hoặc cơ sở dữ liệu có thể được triển khai tại chỗ, thì Memcached sẽ đứng thứ 2 vì cả Amazon DynamoDB và Microsoft Azure Cosmos DB đều là cơ sở dữ liệu thương mại chỉ có thể được triển khai trong đám mây.
Kiến trúc
Redis và Memcached đều tuân theo client-server ngành kiến trúc. Khách hàng điền dữ liệu vào máy chủ dưới dạng khóa-giá trị.
Redis là một luồng trong đó Memcached có kiến trúc đa luồng. Memcached sẽ mở rộng quy mô tốt hơn trên một hệ thống có nhiều lõi hơn có thể xử lý nhiều hoạt động hơn nếu dung lượng máy tính được mở rộng. Tuy nhiên, nhiều phiên bản Redis có thể được khởi tạo trên cùng một hệ thống để sử dụng các lõi bổ sung.
Tính dễ sử dụng
Như đã giải thích ở trên trong phần Mô hình cơ sở dữ liệu, Redis, là một cơ sở dữ liệu đa mô hình, có thể được sử dụng với bất kỳ kiểu mô hình dữ liệu nào. Trong Redis, rất dễ viết mã vì nó đơn giản hóa các tác vụ phức tạp. Redis có cấu trúc dữ liệu nâng cao và không giới hạn ở các giá trị chuỗi đơn giản. Ví dụ:nếu ứng dụng của bạn lưu trữ dữ liệu theo nhóm và bạn muốn theo dõi các nhóm trong danh sách, bạn có thể thực hiện việc này dễ dàng trong Redis. Không thể thực hiện tác vụ tương tự trên Memcached. Nhưng có những cách khác để thực hiện các tác vụ tương tự sẽ yêu cầu nhiều dòng mã hơn.
Mặt khác,Memcached chỉ lưu trữ các giá trị chuỗi thuần túy. Vì vậy, ứng dụng còn lại để đối phó với độ phức tạp của cấu trúc dữ liệu.
Phân vùng dữ liệu
Redis hỗ trợ phân vùng dữ liệu trên nhiều phiên bản nút. Người dùng hiện tại của Redis tận dụng các kỹ thuật khác nhau như phân vùng theo phạm vi, phân vùng băm và băm nhất quán để phân vùng dữ liệu. Trong Redis, phân vùng dữ liệu có thể được thực hiện theo ba cách khác nhau:
- Phân vùng phía máy khách
- Phân vùng được hỗ trợ bởi proxy (ví dụ:twemproxy)
- Phân vùng phía máy chủ với định tuyến truy vấn trong các nút cụm
Memcached cũng hỗ trợ phân vùng dữ liệu trên nhiều nút và băm nhất quán là cách tiếp cận được khuyến nghị để đảm bảo tải lưu lượng được phân bổ đồng đều.
Redis vs Memcached - So sánh năm 2021Nhấp vào TweetNgôn ngữ được hỗ trợ
Redis hỗ trợ hầu hết các ngôn ngữ lập trình được sử dụng nhiều nhất, từ các ngôn ngữ cấp cao đến cấp thấp. Tuy nhiên, Memcached hỗ trợ ít ngôn ngữ hơn so với Redis, nhưng lại hỗ trợ tất cả các ngôn ngữ phổ biến.
Đã lưu trong bộ nhớ cache
- .Net
- C
- C ++
- ColdFusion
- Erlang
- Java
- Danh sách
- Lua
- OCaml
- Perl
- PHP
- Python
- Ruby
Redis
- C
- C #
- C ++
- Clojure
- Pha lê
- D
- Dart
- Elixir
- Erlang
- Lạ mắt
- Bắt đầu
- Haskell
- Haxe
- Java
- JavaScript (Node.js)
- Danh sách
- Lua
- MatLab
- Objective-C
- OCaml
- Pascal
- Perl
- PHP
- Lời mở đầu
- Dữ liệu thuần túy
- Python
- R
- Rebol
- Ruby
- Rỉ rỉ
- Scala
- Lược đồ
- Smalltalk
- Swift
- Tcl
- Visual Basic
Giao dịch
Redis “giao dịch” được thực hiện với ba đảm bảo dưới đây:
- Các giao dịch được tuần tự hóa và thực hiện tuần tự
- Tất cả lệnh hoặc không lệnh nào đều được xử lý (giao dịch nguyên tử)
- Khóa lạc quan mang lại sự đảm bảo bổ sung bằng cách sử dụng tính năng kiểm tra và thiết lập
Redis đảm bảo rằng tất cả chỉ một lệnh từ một máy khách được thực thi cùng một lúc. Tất cả các lệnh trong giao dịch được thực hiện khi lệnh “EXEC” được gọi để đảm bảo tính nguyên tử.
Mặt khác,Memcached không cung cấp tính năng quản lý giao dịch.
Nhân rộng
Redis cung cấp một bản sao đơn giản của leader-follower (master-slave) để tạo bản sao chính xác của các bản chính, với các tính năng sau:
- Máy chủ tiếp tục gửi các lệnh dữ liệu đến máy chủ miễn là chúng được kết nối.
- Nếu kết nối bị ngắt, máy chủ sẽ tuân theo quá trình đồng bộ hóa lại một phần, chỉ sao chép dữ liệu bị thiếu trong khi ngắt kết nối.
- Nếu không thể đồng bộ hóa lại một phần, thì thiết bị sẽ thử đồng bộ hóa lại toàn bộ.
Bạn cũng có thể tận dụng các tính năng sẵn có cao, Redis Sentinels hoặc Redis Cluster, để bảo vệ chuyển đổi dự phòng nâng cao.
Native Memcached không hỗ trợ sao chép, nhưng bạn có thể sử dụng Repcached, một bản vá mã nguồn mở miễn phí để đạt được tính khả dụng cao cho việc triển khai của mình. Nó cung cấp nhiều bản sao chính, sao chép dữ liệu không đồng bộ và hỗ trợ tất cả các lệnh Memcached.
Ảnh chụp nhanh / Độ bền
Ảnh chụp nhanh đơn giản là chế độ xem chỉ đọc của cơ sở dữ liệu của bạn như ở một thời điểm nhất định. Redis hỗ trợ ảnh chụp nhanh và theo mặc định, Redis lưu ảnh chụp nhanh của tập dữ liệu trên đĩa trong một tệp nhị phân có tên là dump.rdb. Bạn có thể gọi một ảnh chụp nhanh theo cách thủ công hoặc tùy chỉnh tần suất hoặc ngưỡng thay đổi để chạy hoạt động.
Đây là hai tùy chọn bền bỉ mà Redis hỗ trợ:
- Sự bền bỉ của RDB
- Độ bền của AOF
RDB là viết tắt của “Redis Database Backup”. Đây là một bản chụp nhanh cơ sở dữ liệu theo thời điểm, nhỏ gọn tại một thời điểm cụ thể. Nó chiếm ít dung lượng hơn, tối đa hóa hiệu suất của Redis và rất tốt cho việc khắc phục thảm họa.
AOF là viết tắt của “Chỉ thêm tệp”. AOF theo dõi tất cả các lệnh được thực thi, và trong một tình huống tai hại, nó sẽ thực hiện lại các lệnh để lấy lại dữ liệu. Phương thức này chiếm nhiều dung lượng hơn vì tất cả các lệnh được thực thi lại và không phải là một phương pháp chụp nhanh.
Mặt khác,Memcached không hỗ trợ tính ổn định của ổ đĩa.
Tập lệnh phía máy chủ
Lua là ngôn ngữ kịch bản nhúng cho máy chủ Redis của bạn, có sẵn kể từ phiên bản 2.6, cho phép bạn thực hiện các thao tác bên trong Redis để đơn giản hóa mã của bạn và tăng hiệu suất. Hai chức năng chính được sử dụng để đánh giá tập lệnh bằng trình thông dịch Lua là:
- ĐÁNH GIÁ
- EVALSHA
Khi tập lệnh Lua đang được thực thi, tất cả các yêu cầu khác đều bị chặn như thể hiện trong hình bên dưới.
Redis cũng bao gồm trình gỡ lỗi tập lệnh Lua trong phiên bản 3.2 giúp việc viết các tập lệnh phức tạp dễ dàng hơn và giúp tăng hiệu suất.
Memcached không hỗ trợ bất kỳ tập lệnh phía máy chủ nào.
Khả năng mở rộng
Có hai kỹ thuật để chia tỷ lệ cơ sở dữ liệu Redis của bạn theo chiều ngang:
- Thêm các phân đoạn trong Redis Cluster
- Thêm các nút vào thiết lập Redis HA (chính / bản sao)
Bạn cũng có thể chia tỷ lệ thiết lập Redis của mình theo chiều dọc khi bạn cần thêm bộ nhớ hoặc máy tính. Nó có thể được thực hiện mà không cần thời gian chết nếu bạn đã thiết lập HA hoặc bạn sử dụng công nghệ Redis Cluster.
Máy chủ Memcached không cung cấp cơ chế phân phối dữ liệu qua các nút (sharding). Vì vậy, trong Memcached, khả năng mở rộng theo chiều ngang đơn giản như việc thêm nhiều nút hơn - vấn đề phân vùng dữ liệu của bạn thành các phân đoạn khác nhau sẽ phải được thực hiện ở cấp ứng dụng / ứng dụng khách. Có một số công cụ nguồn mở có thể giúp bạn điều này.
Giao thức truyền thông
Redis sử dụng TCP làm giao thức mạng và không hỗ trợ UDP.
Memcached hỗ trợ cả giao thức truyền thông TCP và UDP. Dữ liệu được gửi đến máy chủ Memcached ở hai dạng:
- Dòng văn bản:Gửi lệnh và nhận phản hồi từ máy chủ.
- Dữ liệu phi cấu trúc:Nhận hoặc gửi thông tin giá trị cho một khóa nhất định và dữ liệu được trả về ở cùng định dạng được cung cấp.
Chính sách loại bỏ bộ nhớ cache được hỗ trợ
Redis hỗ trợ các loại chính sách trục xuất khác nhau. Hãy xem qua một số.
- xác nhận: Trong "noeviction", lỗi được trả về khi bộ nhớ đạt đến giới hạn.
- allkeys-lru: Lru là viết tắt của “ít được sử dụng gần đây nhất”. Chính sách này sẽ xóa dữ liệu ít được sử dụng gần đây nhất.
- allkeys-lfu: Lfu là viết tắt của “ít được sử dụng nhất”. Chính sách này sẽ xóa dữ liệu ít được sử dụng nhất.
- allkeys-random: Chính sách này sẽ xóa dữ liệu một cách ngẫu nhiên.
- variable-lru: Dữ liệu biến động là với tập dữ liệu hết hạn. Chính sách này sẽ xóa dữ liệu biến động ít được sử dụng nhất gần đây.
- dễ bay hơi-lfu: Dữ liệu biến động là với tập dữ liệu hết hạn. Chính sách này sẽ xóa dữ liệu biến động ít được sử dụng nhất.
- biến động-ngẫu nhiên: Chính sách này sẽ xóa dữ liệu biến động một cách ngẫu nhiên.
- dễ bay hơi-ttl: “TTL” là viết tắt của thời gian để sống. Chính sách này sẽ xóa dữ liệu có thời gian tồn tại ngắn nhất.
Memcached sử dụng thuật toán LRU để loại bỏ dữ liệu khi cần có dung lượng. Đầu tiên, nó tìm kiếm dữ liệu đã hết hạn để xóa nếu dữ liệu đã hết hạn không có sẵn, thuật toán LRU được sử dụng.
Xuất bản và đăng ký Nhắn tin
Redis hỗ trợ tính năng Pub / Sub nhắn tin (xuất bản và đăng ký). Có ba lệnh được sử dụng cho mục đích này.
Khách hàng sử dụng:
- Đăng ký
- Hủy đăng ký
Đăng ký và hủy đăng ký được sử dụng để nhận thông báo từ một kênh cụ thể.
Máy chủ sử dụng:
- Xuất bản
"Xuất bản" được sử dụng để đẩy dữ liệu đến khách hàng.
Memcached không hỗ trợ xuất bản và đăng ký nhắn tin.
Hỗ trợ Luồng
Redis hỗ trợ các luồng giống như Kafka với phiên bản 5.0 trở lên bằng cách sử dụng cấu trúc dữ liệu mới “Redis Streams”. Redis Streams có khái niệm về các nhóm người tiêu dùng, như Apache Kafka, cho phép các ứng dụng khách sử dụng thông điệp theo kiểu phân tán, giúp dễ dàng mở rộng quy mô và tạo ra các hệ thống có tính khả dụng cao.
Memcached không cung cấp hỗ trợ gốc cho Luồng, nhưng có các công cụ thư viện mã nguồn mở như Kafcache để xử lý luồng ở độ trễ thấp.
Hỗ trợ không gian địa lý
Redis có cấu trúc dữ liệu được gọi là Chỉ mục không gian địa lý lưu trữ dữ liệu kinh độ và vĩ độ của một vị trí. Bạn có thể thực hiện các thao tác khác nhau trên dữ liệu không gian địa lý, như tính khoảng cách giữa hai điểm hoặc tìm các địa điểm lân cận.
Memcached không có bất kỳ cấu trúc dữ liệu đặc biệt nào để xử lý dữ liệu không gian địa lý.
Hiệu suất
So sánh hiệu suất giữa các kho lưu trữ dữ liệu khóa-giá trị trong bộ nhớ chỉ là một bài tập trí tuệ hơn là bất kỳ tầm quan trọng thực tế nào - trừ khi bạn đang triển khai hệ thống ở quy mô đến mức điều này trở nên thú vị như một biện pháp tiết kiệm chi phí. Điều này là do các cửa hàng như vậy bị ràng buộc IO và thường thì độ trễ mạng có thể đóng một vai trò lớn hơn trong độ trễ nhận thức của ứng dụng so với độ trễ cơ sở dữ liệu.
Một khía cạnh hiệu suất thực tế hơn là hiệu quả lưu trữ - lượng dữ liệu có thể được đóng gói trong cùng một lượng bộ nhớ. Ngay cả ở đây, các cấu trúc dữ liệu nội bộ được Redis sử dụng cũng khác nhau dựa trên kích thước dữ liệu. Vì vậy, bất kỳ cuộc thảo luận nào về hiệu suất giữa các cơ sở dữ liệu này nên được thực hiện với một chút muối.
Hãy cùng xem một số so sánh được thể hiện trong một bài báo nghiên cứu năm 2016. Trong bài báo này, các tác giả thử nghiệm cơ sở dữ liệu trong bộ nhớ được sử dụng rộng rãi để đo lường hiệu suất của chúng về mặt:
- Thời gian cần thiết để hoàn thành các hoạt động.
- Họ sử dụng bộ nhớ hiệu quả như thế nào trong quá trình hoạt động.
Phiên bản cơ sở dữ liệu được sử dụng trong báo cáo:
Cơ sở dữ liệu | Phiên bản |
---|---|
Redis | 3.0.7 |
Memcached | 1.4.14 |
Thao tác viết
Trong khi ghi dữ liệu, như bạn thấy, trong bảng bên dưới, Memcached cho thấy tốc độ vượt trội ngay cả sau khi số lượng bản ghi tăng lên đến hàng triệu bản ghi.
Thời gian được tính toán để ghi các cặp khóa-giá trị (mili giây)
Số lượng bản ghi | ||||
---|---|---|---|---|
Cơ sở dữ liệu | 1.000 | 10.000 | 100.000 | 1.000.000 |
Redis | 34 | 214 | 1.666 | 14.638 |
Memcached | 23 | 100 | 276 | 2,813 |
Thao tác đọc
Dữ liệu đọc gần như nhất quán trong Redis ngay cả đối với một triệu bản ghi nhưng trong Memcached khi số lượng bản ghi tăng lên theo thời gian cũng tăng lên một chút.
Thời gian đã trôi qua để đọc giá trị tương ứng với một khóa nhất định trên mỗi cơ sở dữ liệu (mili giây)
Số lượng bản ghi | ||||
---|---|---|---|---|
Cơ sở dữ liệu | 1.000 | 10.000 | 100.000 | 1.000.000 |
Redis | 8 | 6 | 8 | 8 |
Memcached | 9 | 14 | 14 | 30 |
Sử dụng bộ nhớ
Trong khi thảo luận về việc sử dụng bộ nhớ, Redis luôn là người tốt nhất như bạn có thể thấy trong kết quả.
Cách sử dụng bộ nhớ của cơ sở dữ liệu trong bộ nhớ cho hoạt động ghi (MB)
Số lượng bản ghi | ||||
---|---|---|---|---|
Cơ sở dữ liệu | 1.000 | 10.000 | 100.000 | 1.000.000 |
Redis | 2.5 | 3.8 | 4.3 | 62.7 |
Memcached | 5.3 | 27.2 | 211 | 264,9 |
Như bạn có thể thấy Redis tốt hơn Memcached.
Việc sử dụng bộ nhớ của cơ sở dữ liệu trong bộ nhớ cho thao tác xóa (MB)
Số lượng bản ghi | ||||
---|---|---|---|---|
Cơ sở dữ liệu | 1.000 | 10.000 | 100.000 | 1.000.000 |
Redis | 0 | 0 | 0 | 0 |
Memcached | 2.2 | 2.1 | 2.2 | 2.2 |
Dịch vụ / Hỗ trợ được Quản lý
Sự phổ biến và cộng đồng lớn hơn dành cho Redis cũng đã thúc đẩy nhu cầu về các dịch vụ được quản lý, lưu trữ và hỗ trợ. Các nhà cung cấp cơ sở dữ liệu được quản lý phổ biến cho Redis ™ * bao gồm ScaleGrid, Redis Labs, AWS Elasticache, Azure Cache và DigitalOcean. Trang này cung cấp một so sánh tuyệt vời về các nhà cung cấp hàng đầu cho Redis ™. Redis cũng có các công cụ báo cáo nội bộ phong phú như số lần truy cập bộ nhớ cache, sử dụng bộ nhớ, hoạt động và thậm chí cả truy vấn chậm được ghi lại.
Các dịch vụ được quản lý cho Memcached ít khả dụng hơn nhiều, nhưng vẫn được hỗ trợ thông qua Amazon Elasticache.
Hỗ trợ bảo mật lớp truyền tải (TLS)
Redis có hỗ trợ TLS gốc bắt đầu từ Redis 6.0. Các phiên bản trước của Redis đã khuyến nghị sử dụng đường hầm để cung cấp hỗ trợ TLS.
Phiên bản Memcached 1.5.13 trở lên hỗ trợ xác thực và mã hóa qua TLS. Tính năng này vẫn đang trong giai đoạn thử nghiệm.
Xác thực
Lên đến Redis 5.x, Redis chỉ hỗ trợ xác thực dựa trên mật khẩu đơn giản. Mật khẩu này đã được lưu trữ ở dạng bản rõ trên máy chủ. Redis trong phiên bản 6.0 trở đi hỗ trợ ACL đầy đủ tính năng.
Memcached phiên bản 1.4.3 trở lên có hỗ trợ SASL. Memcached trước đây không có lớp xác thực.
Tóm tắt
Redis và Memcached đều tuyệt vời và có ứng dụng trong các lĩnh vực khác nhau. Redis đang được phát triển sau này có nhiều chức năng nâng cao và có tài liệu và cộng đồng tuyệt vời.
|
* Redis là thương hiệu của Redis Labs Ltd. Mọi quyền trong đó được bảo lưu cho Redis Labs Ltd. Mọi việc sử dụng của ScaleGrid chỉ dành cho mục đích tham khảo và không cho thấy bất kỳ tài trợ, chứng thực nào hoặc liên kết giữa Redis và ScaleGrid.