Redis'e kıyasla memcached bir dinozor mu? [kapalı]


185

Geçen hafta memcached ile biraz çalıştım ve sadece Redis hakkında öğrendim. Beniokularının bu bölümünü okuduğumda, aniden midemde sıcak ve rahat bir his hissettim:

Redis, steroidlerde memcached olarak kullanılabilir çünkü memcached kadar hızlıdır, ancak daha fazla özellik içerir. Memcached gibi, Redis de zaman aşımlarının tuşlara ayarlanmasını destekler, böylece belirli bir süre geçtiğinde bu anahtar otomatik olarak kaldırılır.

Kulağa harika geliyor. Bu sayfayı kıyaslama ölçütleriyle de buldum: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

Yani, dürüst olmak gerekirse - Memcache gerçekten Redis adı verilen yeni gelenle karşılaştırıldığında performans açısından kötü bir seçim olan eski dinousaur mu?

Daha önce Redis hakkında çok şey duymadım, dolayısıyla sorumun yaklaşımı!



9
Bu ruturaj kriter gerçekten çok dikkat
edilmiyor

2
İşte Membase ile deney yapmaya başladık ve şimdiye kadar mutluyuz. Yine de Memcache'den geliyoruz, bu yüzden yerine bir damla bırakmak güzel bir artı oldu: membase.org
jayshao

2
Redis, gerçek dünyadan yoksun kıyaslamalar için memcached kadar hızlıdır. Bu yavaş olduğunu göstermez - çoğu iş yükü için kesinlikle yeterince hızlıdır, ancak memcached'dan daha hızlı olan şeyler sadece memcached'deki hataları ortaya çıkarır. Neredeyse her zaman donanım veya zayıf uygulama tasarımı ile tıkanır.
Dustin

4
SO-devriyesinin kutsallığı bu soruyu uygun olmayan ve yardımcı olmayan olarak kapatmadı.
Dogweather

Yanıtlar:


74

Memcache hala mükemmel ve çok güvenilir bir araçtır.

bu konuya <100 ms aralığında kimin daha hızlı indiği perspektifinden bakmak yerine, yazılımın "sınıf" başına performansına bakın.

  • Sadece yerel koç mu kullanıyor? -> en hızlı
  • Uzak koç kullanıyor mu? -> hızlı
  • Koç artı sabit disk kullanıyor mu -> oh hurm.
  • Sadece sabit disk kullanıyor mu -> koş!

3
Bildiğim memcache ile çoğaltma işlemek için bir tesis yok. Memcache tamamen bir önbellek anlamına gelir. Öğe temizlenir / kaybolursa, yeniden oluşturulması gerekir. Bunu daha önce hiç kullanmadım veya değerlendirmedim, ama bu sizi ilgilendirebilir. code.google.com/p/memagent
Daniel

1
Membase, memcached protokolü destekler, aynı zamanda kalıcılık ve çoğaltma.
Jim Ferrans

1
Son zamanlarda 4 bağlantı noktasında bağlı ethernet gördüm. 4 x 44MB / s. Bu, bağlı ethernet'in alınabileceğini varsayarak koçu daha da değerli hale getirir!
Daniel

1
Gelecekte referans olması açısından, Facebook açık kaynak kodlu, kısa süre önce memcached'a çoğaltma ekledi. Diğer şeyler de tarihli (redis şimdi süper hızlı, vb), ama beş yıl sonra buradaysanız FYI ...
dannysauer

iyi olan ne? her ikisi de basit bir json dizi direclty, web üzerinde en yaygın olarak kullanılan VERİ değişim biçimi saklayamıyorum, ne düşündükleri hakkında hiçbir fikrim yok ... oh bekleyin belki ben ReJSON eklemeliyim çünkü doğal olarak hiç kimse dünyada JSON umurunda değil
PirateApp

205

İhtiyacınız olan şeye bağlı olarak, genel olarak şunu düşünüyorum:

  • Performansları çok fazla önemsememelisiniz. Redis, çekirdek başına küçük değerlerle daha hızlıdır, ancak memcached, istemciden yardım almadan tek bir yürütülebilir dosya ve TCP bağlantı noktasıyla birden çok çekirdeği kullanabilir. Ayrıca memkached, 100k düzeninde büyük değerlerle daha hızlıdır. Redis son zamanlarda büyük değerler (kararsız dal) hakkında çok şey geliştirdi, ancak yine de memcached bu kullanım durumunda daha hızlı. Buradaki nokta şudur: Ya da biri ya da diğeri, verebilecekleri saniye başına sorgulama için darboğazınız olmayacaktır.
  • Bellek kullanımını önemsemelisiniz. Basit anahtar / değer çiftleri için memcached daha fazla bellek verimlidir. Redis karmalarını kullanırsanız, Redis bellekte daha verimlidir. Kullanım durumuna bağlıdır.
  • Kalıcılık ve çoğaltmayı önemsemelisiniz, sadece Redis'te bulunan iki özellik. Amacınız bir önbellek oluşturmak olsa bile, bir yükseltme veya yeniden başlatmadan sonra verilerinizin hala orada olmasına yardımcı olur.
  • İhtiyacınız olan işlemleri önemsemelisiniz. Redis'te çok fazla karmaşık işlem var, sadece önbellek kullanım durumunu göz önünde bulundurarak bile, genellikle istemci tarafında işlenmesine gerek kalmadan tek bir işlemde çok daha fazlasını yapabilirsiniz (bazen çok fazla G / Ç gereklidir). Bu işlemler genellikle düz GET ve SET kadar hızlıdır. Yani sadece GET / SET'e değil, daha karmaşık şeylere ihtiyacınız varsa Redis çok yardımcı olabilir (zaman çizelgesi önbelleklemeyi düşünün).

Bir kullanım durumu olmadan şu anda doğru seçim yapmak zordur, ancak bir çok şey için Redis'in mantıklı olduğunu düşünüyorum, çünkü bir DB olarak kullanmak istemediğinizde bile, çok daha yetenekli olmak, daha fazla sorunu çözebilirsiniz, sadece önbellekleme değil, aynı zamanda mesajlaşma, sıralama vb.

Ps tabii ki önyargılı olabilirim çünkü Redis projesinin baş geliştiricisiyim.


67
Sonunda harika ifşa için +1
NateDSaint

6
Bunun bir dil hatası olup olmadığından emin değilim, ancak argümanınızı "genel olarak performansla çok fazla ilgilenmemeniz gerektiğini düşünüyorum" ise, bu ciddi bir endişe sebebidir. Redis, bazı sorun sınıfları için çok iyi olabilir, ancak geleneksel olarak memcache, kalıcı veritabanlarındaki performans sorunlarını çözmek için özel olarak kullanılmıştır. Ayrıca listenizden göze çarpan bir ihmalin ürün olgunluğu olduğunu düşünüyorum. Memcache, yaklaşık on yıllık deneyime sahip olgun bir üründür. Redis umut vericidir, ancak sadece 3 yıldır var.
DougW

1
@ DougW Bu ifadeyi bağlamdan çıkarıyorsunuz. Hemen ardından paragrafı kapatan ifadeyi okuduğunuzda çok daha mantıklı: "Buradaki nokta: ne biri ne de diğeri, teslim edebilecekleri saniye başına sorgu için darboğazınız olmayacak"
Dinei

83

Yani, dürüst olmak gerekirse - Memcache gerçekten Redis adı verilen yeni gelenle karşılaştırıldığında performans açısından kötü bir seçim olan eski dinousaur mu?

  • Ayarlanan özellikleri karşılaştırmak Redisdaha fazla işlevselliğe sahiptir;
  • Kurulum kolaylığını karşılaştırmak Redisda çok daha kolaydır. Bağımlılık gerekmez;
  • Aktif gelişimi karşılaştırmak Redisda daha iyidir;
  • Bundan memcachedbiraz daha hızlı olduğuna inanıyorum Redis. Diske hiç dokunmuyor;
  • Benim fikrime göre Redisdaha iyi bir ürün memcached.

31
redis, yalnızca söylerseniz diske dokunur. Genellikle, her iki saniyede bir fsync yapar -> fark
etmezsiniz

1
@Marc yup. Ayrıca diske hiç dokunmamasını söyleyebileceğinize inanıyorum, ama standart şu anda her zaman fsyncs olduğuna inanıyorum?
Alfred

3
Ayrıca, deneyimime göre Redis, Memcached'dan biraz daha hızlıdır (Redis'i sadece bellek modunda kullanırken). Antirez burada bir test yaptı antirez.com/post/redis-memcached-benchmark.html
Sune Rievers

10
BÜYÜK FARK: Memcached çok iş parçacıklıdır ve Redis değildir. Bu nedenle, tek bir isteğin gecikmesi karşılaştırılabilir olsa da, Memcached eşzamanlılık yüksek olduğunda çok daha fazla istek sunabilir. Öte yandan Redis, sadece 1 işlemci çekirdeği / iş parçacığından yararlandığı için sadece birkaç eşzamanlı istekle performans zirvesine ulaşacaktır. Bunu atlatmak için önerilen yöntem, tutarlı bir hash ile bir makinede birden fazla Redis örneği çalıştırmaktır, ancak bu gerçekten zayıf bir çözümdür. Bu nedenle, yüksek eşzamanlılığa ihtiyacınız varsa ve çok çekirdekli CPU'nuz varsa (kim değil), Memcached ÇOK daha hızlıdır.
ColinM

2
@Alfred, Redis'in tek iş parçacıklı olduğu gizli bir gerçek değil, yazar tarafından bir tasarım kararı (sağlamlık üzerinde basitlik). Dustin'in yukarıda anlatılan makalesi, gerçek bir etkisi olduğuna dair sağlam kanıtlardır. Ayrıca Redis bir Zend_Cache arka uç olarak kullanarak kendi kriterlerimde bunu doğruladım; eşzamanlılık arttıkça Redis memcached ile karşılaştırıldığında oldukça hızlı bir şekilde plato olacak.
ColinM

46

Redis'in yapmadığı memcached, en son kullanılan değerlerin önbellekten çıkarılmasıdır. Memcached ile istediğiniz sayıda değeri güvenli bir şekilde ayarlayabilirsiniz ve bellek taştıklarında, son kullanmadığınız değerler silinir. Redis ile, her şeye bir zaman aşımı ayarlayarak bunu yaklaşık olarak yapabilirsiniz; belleği boşaltması gerektiğinde, üç rastgele anahtara bakar ve süresi dolan en yakın olanı siler.

Sadece bir önbellek olarak kullanıyorsanız, ana fark budur.



13

Membase'e bakmak da isteyebilirsiniz.

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

Kullanmadım, ancak kalıcılığı olan bir bellek merkezli KV mağazası olduğu için Redis'e benziyor gibi görünüyor. Ne görebiliyorum önemli farklılıklar şunlardır:

  • Redis, önemli ölçüde daha fazla veri işleme özelliğine sahiptir (sıralı kümeler, vb.)
  • Redis'in yatay ölçeklenebilirlik eklemek için bekleyen bir Redis Kümesi projesi var
  • Redis, hem LRU'yu hem de nesnenin boyutunu göz önünde bulunduran karma bir algoritmaya dayalı olarak diske (VM) tek bir veri yükü katmanına sahiptir.

  • Membase, memcached tel protokolünü kullanır - mevcut uygulamalar için bir yükseltme yolu olarak yararlıdır

  • Membase dağıtılmış karma bir yaklaşım kullanılarak yatay olarak ölçeklendirilir.
  • Membase, bir LRU yaklaşımı kullanarak birden fazla veri boşaltma katmanını destekleyebilir (çok nadiren kullanılan disklere gider, nadiren nadiren SSD'ye gider, sık sık RAM'de kalır)
  • Membase'de TTL özelliğinden emin değilim.

Seçim, uygulamanızın Redis'teki ekstra veri işleme işlevselliğinden ne ölçüde yararlanabileceğine bağlı olabilir.


Merhaba Dean, mesajınız için teşekkürler. kesinlikle kontrol edeceğim. PHP'de Membase kullanabilir miyim?
Endüstriyel

4
Membase memcached protokolünü kullandığından, memcached istemcilerinden herhangi birinin çalışması gerekir: wiki.membase.org/bin/view/Main/Clients
HikeOnPast 28:10

Membaz TTL'yi destekler. Tüm Memcache uygulamaları bir son kullanma süresi ile destek sağlar. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.