Memcached
- Okunuşu
- mem keş di
Kısaca
Memcached, veritabanlarının yükünü hafifletip uygulamaları hızlandırmak için küçük verileri RAM'de tutan, açık kaynaklı bir anahtar-değer önbelleğidir.
Memcached nedir?
Memcached, veriyi bellekte anahtar ve değer olarak tutan basit bir önbellek sunucusudur. Brad Fitzpatrick onu 2003'te LiveJournal'ı hızlandırmak için yazdı; sonrasında Facebook ve Wikipedia gibi sitelerin ölçeklenmesine yardım etti. Tek bir işi iyi yapar: uygulama set ile bir anahtarın altına bir değer koyar, get ile geri okur ve diske hiç dokunulmadığı için yanıt bir milisaniyenin çok altında gelir.
Tasarım bilerek sade tutulmuştur. Değerler, Memcached'in içine bakmadığı baytlardır; genellikle serileştirilmiş nesneler ya da render edilmiş HTML parçalarıdır. Anahtarlar en fazla 250 karakter, değerler ise varsayılan olarak en fazla 1 MB olabilir. Her öğenin bir sona erme süresi olabilir ve bellek dolduğunda en uzun süredir kullanılmayan öğeler atılır. Memcached sunucuları birbiriyle konuşmaz: istemci kütüphanesi bir sunucu seçmek için her anahtarı genellikle consistent hashing ile hash'ler; böylece sunucu eklemek kapasiteyi artırır, birini kaybetmek de yalnızca önbelleğin o dilimini kaybettirir.
Uygulamalar onu genellikle cache-aside kalıbıyla kullanır: önce önbelleğe bakılır, bulunamazsa veritabanı okunur ve sonuç bir yaşam süresiyle (TTL) önbelleğe yazılır. Sık aradığınız bir numarayı monitörünüze yapıştırdığınız bir not kâğıdı gibidir: rehberi açmaktan çok daha hızlıdır ve düşse de bir şey kaybolmaz. Memcached asla internetten erişilebilir olmamalıdır: 2018'de açıkta kalan sunucular rekor kıran DDoS amplification saldırıları için kötüye kullanıldı ve o günden beri UDP varsayılan olarak kapalıdır.
Memcached en çok Redis ile karşılaştırılır. Redis de bellek içi bir anahtar-değer deposudur, ama listeler, kümeler ve sıralı kümeler gibi veri türleri sunar, veriyi diske kaydedebilir, başka sunuculara replike olur ve pub/sub mesajlaşmayı destekler. Memcached'de bunların hiçbiri yoktur ve yeniden başlatıldığında verisini kaybeder; ama çok iş parçacıklıdır, işletmesi kolaydır ve büyük, sade önbellekler için çok verimlidir; bu yüzden yalnızca hızlı ve gözden çıkarılabilir bir önbelleğe ihtiyaç duyan ekiplere uyar.
Önemli noktalar
- Memcached, çok küçük bir komut kümesine sahip, bellek içi bir anahtar-değer önbelleğidir.
- Öğelerin süresi belirlenen zamanda dolar; bellek dolduğunda en uzun süredir kullanılmayanlar atılır.
- İstemciler anahtarları sunuculara dağıtır; sunucular birbirleriyle veri paylaşmaz.
- Varsayılan olarak veri yalnızca bellekte yaşar ve yeniden başlatmada kaybolur; bu yüzden yalnızca yeniden oluşturulabilecek veriler tutulmalıdır.
- Redis veri yapıları, kalıcılık ve replikasyon ekler; Memcached daha sade ve çok iş parçacıklı kalır.
Örnek
from pymemcache.client.base import Client
cache = Client(("localhost", 11211)) # Memcached's default port
def get_product_name(product_id):
key = f"product:{product_id}:name"
cached = cache.get(key) # 1. try the cache first
if cached is not None:
return cached.decode()
name = db.fetch_product_name(product_id) # 2. on a miss, ask the database
cache.set(key, name, expire=300) # 3. keep it for 5 minutes
return nameSık sorulan sorular
Memcached ile Redis arasındaki fark nedir?
İkisi de anahtar-değer verisini bellekte tutar. Memcached, yeniden başlatıldığında her şeyi kaybeden, string'ler için sade ve çok iş parçacıklı bir önbellektir; Redis ise veri yapıları, isteğe bağlı diske kalıcılık, replikasyon ve mesajlaşma özellikleri ekler.
Memcached hâlâ kullanılıyor mu?
Evet. Facebook gibi çok büyük siteler onu hâlâ devasa ölçekte çalıştırıyor, büyük bulut sağlayıcıları da onu yönetilen bir servis olarak sunuyor; yine de birçok yeni proje daha fazlasını yaptıkları için Redis'i ya da Valkey'i seçiyor.
Memcached veriyi diske kaydeder mi?
Varsayılan olarak hayır. Her şey RAM'de yaşar ve sunucu yeniden başladığında kaybolur; bu yüzden yalnızca asıl kopyası veritabanı gibi başka bir yerde duran veriler önbelleğe alınmalıdır.
İlgili sayfalar
- RedisVeritabanları, s. 30Redis, okuma ve yazmayı milisaniyenin çok altında yapan bellek içi bir anahtar-değer deposudur; önbellek, oturum deposu ve mesaj aracısı olarak yaygındır.
- ÖnbellekBackend ve API'ler, s. 36Önbellek, sık kullanılan verilerin kopyalarını tutan hızlı ve geçici bir depolama katmanıdır; sonraki istekler yavaş işi tekrarlamadan hızla karşılanır.
- Key-Value StoreVeritabanları, s. 18Key-value store, her veriyi benzersiz bir anahtar altında saklayan bir NoSQL veritabanıdır; uygulama veriyi bu anahtarla çok hızlı okuyup yazabilir.
- Consistent HashingYazılım Mimarisi, s. 7Consistent hashing (tutarlı hashleme), anahtarları sunuculara, sunucu eklenip çıkarıldığında yalnızca küçük bir kısmı yer değiştirecek şekilde dağıtır.
- LRU CacheVeri Yapıları, s. 25LRU (least recently used) cache, sabit sayıda öğe tutar ve dolunca en uzun süredir kullanılmayanı atar; son kullanılan verinin yine gerekeceğini varsayar.
- TTLAğlar, s. 34TTL (time to live), verinin geçerlilik sınırıdır: IP paketinde kalan yönlendirici atlaması sayısı, DNS'te ve önbellekte yanıtın kaç saniye kullanılabileceği.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin