Là memcached một con khủng long so với Redis? [đóng cửa]


185

Tôi đã làm việc khá nhiều với memcached những tuần trước và chỉ cần tìm hiểu về Redis. Khi tôi đọc phần này của bài đọc của họ, tôi đột nhiên có một cảm giác ấm áp, ấm cúng trong bụng:

Redis có thể được sử dụng như một memcached trên steroid vì nhanh như memcached nhưng với một số tính năng nhiều hơn. Giống như memcached, Redis cũng hỗ trợ cài đặt thời gian chờ thành các phím để phím này sẽ tự động bị xóa khi một khoảng thời gian nhất định trôi qua.

Điều này nghe thật tuyệt vời. Tôi cũng đã tìm thấy trang này với điểm chuẩn: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

Vì vậy, thành thật mà nói - Có phải memcache thực sự là dinousaur cũ mà là một lựa chọn tồi từ góc độ hiệu suất khi so sánh với người mới này được gọi là Redis?

Tôi chưa từng nghe nhiều về Redis trước đây, do đó cách tiếp cận cho câu hỏi của tôi!



9
điểm chuẩn ruturaj này không thực sự đáng quan tâm lắm
DSomnus

2
Chúng tôi đã bắt đầu thử nghiệm w / Membase tại nơi làm việc và hạnh phúc cho đến nay. Mặc dù, chúng tôi đến từ Memcache, vì vậy việc thay thế giảm giá là một điểm cộng tuyệt vời: membase.org
jayshao

2
Redis nhanh như memcached cho các điểm chuẩn không thuộc thế giới thực. Điều đó không có nghĩa là nó chậm - chắc chắn nó đủ nhanh cho hầu hết khối lượng công việc, nhưng mọi thứ nhanh hơn memcached chỉ tiết lộ các lỗi trong memcached. Nó hầu như luôn bị tắc nghẽn bởi phần cứng hoặc thiết kế ứng dụng kém.
Dustin

4
Tôi ngạc nhiên khi đội tuần tra SO-tôn nghiêm đã đóng câu hỏi này là không phù hợp và không hữu ích.
Dogweather

Câu trả lời:


74

Memcache là một công cụ tuyệt vời vẫn còn và RẤT đáng tin cậy.

thay vì xem xét vấn đề này từ góc độ nhận ra ai nhanh hơn trong phạm vi <100 ms, hãy xem hiệu suất trên mỗi "lớp" của phần mềm.

  • Có phải nó chỉ sử dụng ram địa phương? -> nhanh nhất
  • Nó có sử dụng ram từ xa không? -> nhanh
  • Nó có sử dụng ram cộng với ổ cứng -> oh Hurm.
  • Có phải nó chỉ sử dụng đĩa cứng -> chạy!

3
Không có cơ sở để xử lý sao chép với memcache mà tôi biết. Memcache hoàn toàn có nghĩa là một bộ đệm. Nếu vật phẩm bị thanh trừng / mất, thì nó cần phải được xây dựng lại. Tôi chưa từng sử dụng nó trước đây và tôi cũng chưa đánh giá nó, nhưng điều này có thể khiến bạn quan tâm. code.google.com/p/memagent
Daniel

1
Membase hỗ trợ giao thức memcached nhưng cũng bền bỉ và nhân rộng.
Jim Ferrans

1
Gần đây tôi thấy ethernet ngoại quan, trên 4 cổng. 4 x 44MB / s. Điều này làm cho ram thậm chí còn có giá trị hơn, giả sử bạn có thể nhận được ethernet ngoại quan!
Daniel

1
Để phục vụ cho việc tham khảo trong tương lai, gần đây, mã nguồn mở của Facebook đã bổ sung bản sao vào memcached. Những thứ khác cũng có niên đại (bây giờ là siêu nhanh, v.v.), nhưng FYI nếu bạn ở đây năm năm sau ...
dannysauer

cũng có vấn đề gì? Cả hai không thể lưu trữ một direclty mảng json đơn giản, định dạng trao đổi DATA được sử dụng nhiều nhất trên web, tôi không biết họ đang nghĩ gì ... ồ, có lẽ tôi nên thêm ReJSON vì thực tế không ai quan tâm đến JSON trên thế giới
PirateApp

205

Phụ thuộc vào những gì bạn cần, nói chung tôi nghĩ rằng:

  • Bạn không nên quan tâm quá nhiều về màn trình diễn. Redis nhanh hơn trên mỗi lõi với các giá trị nhỏ, nhưng memcached có thể sử dụng nhiều lõi với một cổng TCP và thực thi duy nhất mà không cần sự trợ giúp từ máy khách. Ngoài ra memcached nhanh hơn với các giá trị lớn theo thứ tự 100k. Redis gần đây đã cải thiện rất nhiều về các giá trị lớn (nhánh không ổn định) nhưng vẫn còn memcached nhanh hơn trong trường hợp sử dụng này. Vấn đề ở đây là: không phải cái này hay cái kia có thể sẽ là nút cổ chai của bạn cho truy vấn mỗi giây mà chúng có thể phân phối.
  • Bạn nên quan tâm đến việc sử dụng bộ nhớ. Đối với các cặp khóa-giá trị đơn giản, memcached sẽ tiết kiệm bộ nhớ hơn. Nếu bạn sử dụng băm Redis, Redis sẽ hiệu quả hơn về bộ nhớ. Phụ thuộc vào trường hợp sử dụng.
  • Bạn nên quan tâm đến sự kiên trì và nhân rộng, hai tính năng chỉ có trong Redis. Ngay cả khi mục tiêu của bạn là xây dựng bộ đệm, điều đó sẽ giúp sau khi nâng cấp hoặc khởi động lại, dữ liệu của bạn vẫn ở đó.
  • Bạn nên quan tâm đến các loại hoạt động bạn cần. Trong Redis có rất nhiều thao tác phức tạp, thậm chí chỉ cần xem xét trường hợp sử dụng bộ đệm, bạn thường có thể làm nhiều hơn trong một thao tác, mà không yêu cầu dữ liệu phải được xử lý phía máy khách (đôi khi rất cần I / O). Thao tác này thường nhanh như GET và SET. Vì vậy, nếu bạn không chỉ cần NHẬN / THIẾT LẬP nhưng những thứ phức tạp hơn Redis có thể giúp ích rất nhiều (nghĩ về bộ nhớ đệm dòng thời gian).

Không có trường hợp sử dụng rất khó để chọn ngay bây giờ, nhưng tôi nghĩ rằng đối với nhiều thứ, Redis có ý nghĩa ngay cả khi bạn không muốn sử dụng nó như một DB, có khả năng giải quyết nhiều vấn đề hơn, không chỉ lưu trữ mà còn nhắn tin, xếp hạng, v.v.

Tất nhiên tôi có thể bị thiên vị vì tôi là nhà phát triển chính của dự án Redis.


67
+1 để tiết lộ tuyệt vời vào cuối
NateDSaint

6
Tôi không chắc đây có phải là lỗi ngôn ngữ không, nhưng nếu bạn dẫn dắt cuộc tranh luận của mình với "nói chung tôi nghĩ rằng bạn không nên quan tâm quá nhiều đến hiệu suất", đó là nguyên nhân nghiêm trọng gây lo ngại. Redis có thể rất tốt cho một số loại vấn đề nhất định, nhưng theo truyền thống, memcache đã được sử dụng đặc biệt để giải quyết các vấn đề về hiệu suất với cơ sở dữ liệu liên tục. Tôi cũng nghĩ rằng một thiếu sót rõ ràng từ danh sách của bạn là sự trưởng thành của sản phẩm. Memcache là một sản phẩm trưởng thành với khoảng một thập kỷ kinh nghiệm. Redis đầy hứa hẹn, nhưng chỉ mới xuất hiện được khoảng 3 năm.
DougW

1
@DougW Bạn đang đưa cụm từ này ra khỏi bối cảnh. Nó có ý nghĩa hơn nhiều khi bạn đọc cụm từ kết thúc đoạn văn ngay sau đó: "Vấn đề ở đây là: cũng không phải cái này hay cái kia sẽ là nút cổ chai của bạn cho truy vấn mỗi giây mà chúng có thể cung cấp"
Dinei

83

Vì vậy, thành thật mà nói - Có phải memcache thực sự là dinousaur cũ mà là một lựa chọn tồi từ góc độ hiệu suất khi so sánh với người mới này được gọi là Redis?

  • So sánh các tính năng được thiết lập sau đó Rediscó nhiều chức năng hơn;
  • So sánh dễ cài đặt Rediscũng dễ dàng hơn rất nhiều. Không phụ thuộc cần thiết;
  • So sánh phát triển tích cực Rediscũng tốt hơn;
  • Tôi tin memcachedlà nhanh hơn một chútRedis . Nó hoàn toàn không chạm vào đĩa;
  • Ý kiến ​​của tôi là Redissản phẩm tốt hơn memcached.

31
redis chỉ chạm vào đĩa nếu bạn nói với nó. Thông thường, nó sẽ thực hiện fsync mỗi giây hoặc lâu hơn -> bạn sẽ không nhận thấy điều đó
Marc Seeger

1
@Marc yup. Tôi cũng tin rằng bạn có thể bảo nó không chạm vào đĩa, nhưng tôi có tin rằng nó luôn luôn là fsyncs ngay bây giờ không?
Alfred

3
Ngoài ra, theo kinh nghiệm của tôi, Redis nhanh hơn một chút so với Memcached (khi sử dụng Redis ở chế độ chỉ có bộ nhớ). Antirez đã thực hiện một thử nghiệm ở đây antirez.com/post/redis-memcached-benchmark.html
Sune Rievers

10
SỰ KHÁC BIỆT LỚN: Memcached là đa luồng và Redis thì không. Vì vậy, trong khi độ trễ của một yêu cầu là tương đương, Memcached có thể phục vụ nhiều yêu cầu hơn khi độ đồng thời cao. Mặt khác, Redis sẽ đạt đến đỉnh cao hiệu suất chỉ với một vài yêu cầu đồng thời vì nó chỉ sử dụng 1 lõi / luồng cpu. Phương pháp được đề xuất để phá vỡ điều này là chạy nhiều phiên bản Redis trên một máy với băm nhất quán, nhưng đây là một giải pháp thực sự kém. Vì vậy, nếu bạn cần đồng thời cao và có CPU đa lõi (ai không), Memcached sẽ NHIỀU nhanh hơn.
ColinM

2
@Alfred, không phải là một sự thật ẩn giấu rằng Redis là một luồng đơn, nó là một quyết định thiết kế (đơn giản hơn mạnh mẽ) của tác giả. Bài viết Dustin liên kết ở trên là bằng chứng vững chắc rằng nó có tác động thực sự. Ngoài ra, tôi đã xác nhận điều này trong các điểm chuẩn của riêng mình bằng cách sử dụng Redis làm phụ trợ Zend_Cache; khi đồng thời tăng Redis sẽ cao nguyên khá nhanh so với memcached.
ColinM

46

Những gì memcached làm mà Redis không làm là việc trục xuất các giá trị ít được sử dụng gần đây nhất từ ​​bộ đệm. Với memcached, bạn có thể đặt bao nhiêu giá trị tùy thích một cách an toàn và khi chúng tràn bộ nhớ, những giá trị bạn không sử dụng gần đây sẽ bị xóa. Với Redis, bạn chỉ có thể ước chừng điều này, bằng cách đặt thời gian chờ cho mọi thứ; khi cần giải phóng bộ nhớ, nó sẽ xem xét ba khóa ngẫu nhiên và xóa một phím gần nhất sắp hết hạn.

Đó là sự khác biệt chính, nếu bạn chỉ sử dụng nó làm bộ đệm.



13

Bạn cũng có thể muốn xem Membase.

http://www.northscale.com/products/membase_server.html

Tôi chưa sử dụng nó, nhưng nó có vẻ giống với Redis ở chỗ nó là một cửa hàng KV tập trung vào bộ nhớ với sự bền bỉ. Sự khác biệt chính từ những gì tôi có thể thấy là:

  • Redis có khả năng thao tác dữ liệu nhiều hơn đáng kể (các bộ được đặt hàng, v.v.)
  • Redis có một dự án Redis Cluster đang chờ xử lý để thêm khả năng mở rộng theo chiều ngang
  • Redis có một tầng giảm tải dữ liệu vào đĩa (VM) dựa trên thuật toán lai xem xét cả LRU và kích thước của đối tượng.

  • Membase sử dụng giao thức dây memcached - hữu ích như một đường dẫn nâng cấp cho các ứng dụng hiện có

  • Membase được thiết lập để mở rộng theo chiều ngang bằng cách sử dụng phương pháp băm phân tán
  • Membase có thể hỗ trợ nhiều tầng giảm tải dữ liệu bằng cách sử dụng phương pháp LRU (rất hiếm khi được sử dụng vào đĩa, phần nào hiếm khi chuyển sang SSD, công cụ thường xuyên nằm trong RAM)
  • Không chắc chắn về khả năng TTL trong Membase.

Sự lựa chọn có thể phụ thuộc vào mức độ mà ứng dụng của bạn có thể tận dụng chức năng thao tác dữ liệu bổ sung trong Redis.


Xin chào Dean, cảm ơn bài viết của bạn. Tôi nhất định sẽ kiểm tra. Tôi có thể sử dụng Membase trong PHP không?
Công nghiệp

4
Do Membase sử dụng giao thức memcached, bất kỳ ứng dụng khách memcached nào cũng nên hoạt động: wiki.membase.org/bin/view/Main/Cl Client
HikeOnPast

Membase hỗ trợ TTL. Tất cả các hỗ trợ triển khai Memcache đều có thời gian hết hạn. github.com/memcached/memcached/blob/master/doc/protatio.txt#L79
Saurav

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.