Artsution® — 360° tasarım & teknoloji stüdyosu

Memcached Nedir? Redis ile Farkları

Memcached, verileri bellekte tutan sade ve hızlı bir anahtar-değer önbelleğidir. Nasıl çalıştığını, sınırlarını ve Redis ile farklarını bir karşılaştırma tablosuyla anlatıyoruz.
Küçük web arayüzünden ayrı ayrı bağlanan turkuaz, sarı ve mercan kartotek kutuları; her kutuda kartlar ve bir anahtar.

Bu konuda desteğe mi ihtiyacınız var?

Marka, web ve yazılım işlerinizi tek ekipte planlayalım.

Proje Başlat

Memcached nedir sorusunun kısa cevabı şu: Memcached, sık kullanılan verileri sunucunun belleğinde (RAM) geçici olarak tutan, sade ve yüksek performanslı bir anahtar-değer önbellek sistemidir. Amacı tek bir işi iyi yapmaktır: veritabanı sorgularının ya da ağır hesaplamaların sonuçlarını kısa süreliğine saklayıp dinamik web uygulamalarını hızlandırmak. Redis'e göre daha az özellik sunar ama bu sadelik, saf önbellek işlerinde onu hâlâ geçerli bir seçenek yapar.

Kısaca

  • Memcached, bellekte çalışan, dağıtık bir anahtar-değer önbelleğidir. 2003'te LiveJournal için geliştirildi.
  • Değerleri sunucu açısından anlamsız bayt dizileri olarak saklar. Liste, küme gibi veri tipleri yoktur.
  • Bellek dolduğunda en uzun süredir kullanılmayan verileri siler (LRU).
  • Sunucular birbirleriyle konuşmaz. Hangi verinin hangi sunucuda duracağına istemci karar verir.
  • Saf önbellek için Memcached, veri tipleri, kalıcılık ya da kuyruk gerekiyorsa Redis daha uygundur.

Memcached nedir?

Brad Fitzpatrick, Memcached'i 2003'te LiveJournal sitesi için geliştirdi. Resmî sitesi onu "yüksek performanslı, dağıtık, bellek içi nesne önbellek sistemi" olarak tanımlar. Amacı veritabanı yükünü azaltarak dinamik web uygulamalarını hızlandırmaktır. BSD 3-Clause lisansıyla dağıtılan açık kaynak bir yazılımdır.

Memcached'in dünyası çok basittir. Bir öğe (item) şunlardan oluşur:

  • bir anahtar (ör. urun_listesi_kategori_12),
  • bir son kullanma süresi (TTL),
  • isteğe bağlı bayraklar,
  • ve ham veri.

Sunucu, sakladığı verinin ne olduğuyla ilgilenmez. Veriyi uygulamanızın önceden metne ya da bayt dizisine dönüştürmesi (serileştirmesi) gerekir. Ayrıca veri üzerinde yapabileceğiniz işlemler de sınırlıdır: kaydet, oku, sil, değiştir ve sayısal değerleri artır ya da azalt.

Memcached nasıl çalışır?

Akış, Redis yazımızda anlattığımız önbellek akışıyla aynıdır:

  1. Uygulama bir veriye ihtiyaç duyar ve önce Memcached'e sorar.
  2. Veri varsa doğrudan kullanır.
  3. Yoksa ana veritabanından okur, sonucu bir süreliğine Memcached'e yazar.
  4. Bir sonraki istekte veri bellekten gelir.

Memcached'i farklı kılan, birden fazla sunucuyla nasıl çalıştığıdır. Resmî dokümantasyona göre Memcached sunucuları birbirinden bağımsızdır. Birbirleriyle iletişim kurmaz, veri eşitlemez, kopyalama (replikasyon) yapmazlar. Hangi anahtarın hangi sunucuda tutulacağına, istemci tarafındaki kütüphane bir karma (hash) algoritmasıyla karar verir. Bu sayede yeni bir sunucu eklemek, önbellek kapasitesini doğrudan artırır.

Tek krem istemci kutusundan ayrı kablolarla bağlanan üç renkli bellek çekmecesinde, eş renkli anahtarlar ve boş değer kartları.
Memcached'de dağıtımı istemci yapar; sunucular birbirinden habersizdir.

Bellek dolunca ne olur?

Memcached varsayılan olarak bir LRU (Least Recently Used, en uzun süredir kullanılmayan) önbelleğidir. Bellek dolduğunda, en uzun süredir erişilmeyen öğeler yeni veriye yer açmak için silinir. Bunun yanında öğeler kendi son kullanma süreleri dolunca geçersiz olur.

Bu, Memcached'e yazdığınız hiçbir şeyin orada kalacağının garantisi olmadığı anlamına gelir. Laravel'in belgeleri bunu açıkça hatırlatır: Memcached sürücüsü kullanılırken "süresiz" saklanan öğeler bile önbellek boyut sınırına ulaştığında silinebilir. Bu yüzden Memcached'e yalnız yeniden oluşturulabilecek veriler konmalıdır.

Öte yandan bir başka sınır da öğe boyutudur. Memcached'in belgelerine göre varsayılan en büyük öğe boyutu 1 MB'tır. -I seçeneğiyle değiştirilebilir ama büyük değerler bellek kullanımını artırır.

Memcached kalıcı mıdır?

Klasik anlamda hayır. Memcached bir önbellektir ve sunucu yeniden başlatıldığında içeriği kaybolur. Aslında bu, tasarımın bir parçasıdır.

Yeni sürümlerde bu durumu kısmen hafifleten iki özellik vardır:

  • Warm restart (sıcak yeniden başlatma): Memcached 1.5.18 ve sonrasında, planlı bir yeniden başlatmada önbellek içeriği bir bellek dosyası üzerinden korunabilir. Ancak sunucu kapalıyken gelen yazma ve silme işlemleri kaçırılır ve bazı ayarlar değişirse önbellek boş başlar.
  • Extstore: 1.6.0 ve sonrasında varsayılan olarak derlenen bu eklenti, anahtarları bellekte tutarken değerleri harici depolamaya (genellikle flash disk) taşıyarak daha büyük önbellekler kurmayı sağlar.

Yine de bunlar Memcached'i bir veritabanına dönüştürmez. Kalıcılığın önemli olduğu veriler için Redis'in RDB ve AOF seçenekleri ya da doğrudan ana veritabanı daha doğru yerdir.

Memcached ile Redis arasındaki farklar

ÖzellikMemcachedRedis
Temel modelBasit anahtar-değer önbelleğiVeri yapısı sunucusu (anahtar-değer ve fazlası)
Veri tipleriYalnız ham değer (string)String, hash, liste, küme, sıralı küme, stream ve daha fazlası
Veri üzerinde işlemKaydet, oku, sil, artır/azaltVeri tipine özel zengin komutlar, atomik işlemler, betikler
KalıcılıkYok (warm restart ile sınırlı koruma)RDB, AOF, ikisi birlikte ya da hiç
Çoğaltma (replikasyon)Yok; sunucular bağımsızVar (birincil ve kopya sunucular)
Dağıtımİstemci tarafında karma ileRedis Cluster ya da istemci tarafında
İş parçacığı modeliÇok iş parçacıklı (varsayılan 4 işçi)Komutlar ağırlıklı olarak ana iş parçacığında; çok çekirdek için birden fazla örnek önerilir
Varsayılan en büyük değer1 MB (ayarlanabilir)512 MB (tek string)
Bellek doluncaLRU ile eski öğeleri silermaxmemory ve seçilen tahliye politikasına göre
Lisans (Ağustos 2025)BSD 3-ClauseRedis 8 ve sonrası: RSALv2, SSPLv1 ya da AGPLv3
En uygun kullanımSaf, geçici önbellekÖnbellek, oturum, kuyruk, sayaç, sıralama, mesajlaşma
İki açık araç kutusundan birinde özdeş krem kartlar, diğerinde farklı şekiller, bağlantılı halkalar ve küçük depolama silindiri.
Memcached yalnızca basit anahtar-değer çiftleri saklar; Redis farklı veri tiplerini bir arada tutar.

Hangisini seçmelisiniz?

Memcached mantıklı olabilir:

  • İhtiyacınız yalnızca veritabanı sorgu sonuçlarını ya da hesaplanmış sayfa parçalarını kısa süreliğine saklamaksa,
  • Basit ve az yapılandırma gerektiren bir çözüm istiyorsanız,
  • Önbellekteki verinin kaybolması hiçbir soruna yol açmıyorsa,
  • Çok çekirdekli tek bir sunucuyu tek bir süreçle verimli kullanmak istiyorsanız.

Redis daha mantıklı olabilir:

  • Oturumları, iş kuyruklarını, sayaçları ya da sıralama tablolarını da aynı yerde tutmak istiyorsanız,
  • Yeniden başlatmada verilerin korunması gerekiyorsa,
  • Kopya sunucu (replikasyon) ile yedeklilik istiyorsanız,
  • Liste, küme gibi veri yapılarıyla çalışmanız gerekiyorsa.

Pratikte birçok çerçeve ve eklenti ikisini de destekler. Örneğin Laravel'in önbellek katmanı Memcached ve Redis'i hazır sürücü olarak sunar. WordPress tarafında LiteSpeed Cache eklentisi, nesne önbelleği için Memcached, LiteSpeed'in LSMCD'si ve Redis'i destekler. Bu yüzden seçimi çoğu zaman sunucunuzda neyin kurulu olduğu ve başka hangi işler için bu sisteme ihtiyaç duyduğunuz belirler.

Sık yapılan hatalar

  • Memcached'i kalıcı veri deposu gibi kullanmak: Oturum ya da sepet gibi kaybolmaması gereken verileri yalnız Memcached'te tutmak, bellek dolduğunda ya da sunucu yeniden başladığında kullanıcıların oturumdan atılmasına yol açabilir.
  • Portu internete açık bırakmak: Memcached'in sunucuları güvenilir bir iç ağda çalışacak biçimde konumlandırılmalıdır. Bu yüzden portu güvenlik duvarıyla kapatın ve yalnız uygulama sunucularının erişmesine izin verin.
  • Önbelleği geçersiz kılmayı (invalidation) düşünmemek: Veritabanında bir kayıt değiştiğinde önbellekteki eski kopyanın silinmesi ya da güncellenmesi gerekir. Aksi hâlde kullanıcılar eski veriyi görür.
  • Büyük nesneleri tek parça saklamaya çalışmak: Varsayılan öğe sınırı 1 MB'tır. Büyük veriler için yapıyı küçük parçalara bölmek daha sağlıklıdır.

Bizim deneyimimiz

Önbellek katmanını seçerken araçtan değil, ihtiyaçtan başlıyoruz. Yalnız sorgu sonuçlarını kısa süreliğine saklamak mı gerekiyor, yoksa oturum ve kuyruk gibi işler de mi var? Bu soruya göre Memcached ya da Redis'i değerlendiriyoruz. Özel yazılım projelerinde önbelleğe hangi verinin, ne kadar süreyle konacağını ve veri değiştiğinde nasıl temizleneceğini mimari aşamada belirliyoruz. Kurumsal WordPress sitelerinde ise bu sitede de kullandığımız LiteSpeed Cache gibi araçlarla önce sayfa önbelleğini doğru kuruyor, nesne önbelleğini ancak gerçekten ihtiyaç olduğunda ekliyoruz.

Sık sorulan sorular

Memcached eski bir teknoloji mi, hâlâ kullanılıyor mu?

Memcached 2003'ten beri geliştirilen ve bugün de aktif olarak sürdürülen bir projedir. Yeni sürümlerde warm restart ve extstore gibi özellikler eklendi. Yaygın çerçeveler ve barındırma hizmetleri Memcached'i desteklemeye devam ediyor.

WordPress sitemde Memcached mi, Redis mi kullanmalıyım?

İkisi de WordPress'in nesne önbelleğini kalıcı hâle getirmek için kullanılabilir. Sunucunuzda hangisi kuruluysa ve kullandığınız önbellek eklentisi hangisini destekliyorsa onunla başlamak mantıklıdır. Aynı sunucuda kuyruk ya da oturum gibi başka işler için de bir sisteme ihtiyacınız varsa Redis daha esnek bir seçenektir.

Memcached kullanmak için VPS gerekir mi?

Çoğu durumda evet. Memcached bir sunucu yazılımıdır ve paylaşımlı hosting paketlerinde genellikle kurulamaz. Bununla birlikte bazı barındırma firmaları hazır olarak sunar. Kendi kurulumunuz için bir VPS ya da daha büyük bir sunucu gerekir.

Memcached'teki veriler kaybolursa ne olur?

Doğru kurgulanmış bir sistemde hiçbir şey kaybolmaz, yalnızca birkaç istek yavaşlar. Uygulama veriyi önbellekte bulamayınca ana veritabanından okur ve önbelleği yeniden doldurur. Bu yüzden Memcached'e yalnız yeniden oluşturulabilecek veriler konmalıdır.

Sonuç

Memcached, tek bir işi sade ve hızlı yapan bir önbellektir. Veri tipleri, kalıcılık ya da çoğaltma sunmaz; bunun karşılığında az yapılandırma ve öngörülebilir davranış sağlar. Saf önbellek ihtiyacı için hâlâ geçerli bir seçenektir. Oturum, kuyruk ya da kalıcılık gerekiyorsa Redis daha uygun bir araçtır.

Uygulamanızın ya da sitenizin önbellek yapısını birlikte planlamak isterseniz yazılım ve dijital çözümler ile WordPress geliştirme hizmetlerimize göz atabilir ya da bize yazabilirsiniz.

Kaynaklar12
  1. Memcached — About. memcached.org
  2. Memcached Documentation — Overview (tasarım ilkeleri, LRU, istemci tarafında karma). docs.memcached.org
  3. Memcached Documentation — Warm Restart. docs.memcached.org
  4. Memcached — Extstore. memcached.org
  5. Debian Manpages — memcached(1) (`-I` en büyük öğe boyutu, `-t` iş parçacığı sayısı). manpages.debian.org
  6. Memcached — LICENSE (BSD 3-Clause). github.com
  7. Redis — Redis FAQ. redis.io
  8. Redis — Redis Strings (512 MB sınırı). redis.io
  9. Redis — Redis persistence. redis.io
  10. Redis — Licenses. redis.io
  11. Laravel — Cache (11.x). laravel.com
  12. LiteSpeed Docs — LSCache for WordPress, Cache settings (Object Cache). docs.litespeedtech.com
LinkedIn
WhatsApp
X
Facebook

Proje Başlat

Bize projenizden bahsedin.

Formu doldurun, bir iş günü içinde size özel bir yol haritasıyla dönelim. Dilerseniz doğrudan info@artsution.com.tr adresine de yazabilirsiniz.