MemCache, veritabanı yükünü azaltmak için dinamik Web uygulamaları için kullanılan ücretsiz, açık kaynaklı, yüksek performanslı, dağıtılmış bir bellek nesnesi önbellek sistemidir. Verileri ve nesneleri bellekte önbelleğe alarak veritabanının okuma sayısını azaltır ve böylece web sitesine erişim hızını artırır. MemCaChe, anahtar / değer çiftlerini depolayan bir HashMap'tir. Keyfi verilerin (dizeler, nesneler vb.) Anahtar / değer çiftlerini bellekte depolar. Veriler, veritabanı çağrılarından, API çağrılarından veya sayfa oluşturma sonuçlarından gelebilir.
MemCache tasarım konsepti küçük ve güçlüdür. Basit tasarımı hızlı dağıtımı, kolay geliştirmeyi destekler ve büyük ölçekli veri önbelleğe alma ile karşılaşılan birçok sorunu çözer. Açık API MemCache'nin Java, C / C ++ / C #, Perl, Python, PHP, Ruby gibi en popüler programlama dilleri.
(Not: MemCached'de önbelleğe alınan veritabanı verileri, veritabanını güncellerken aynı zamanda MemCached'i de güncellemeye dikkat edin)
MemCache "dağıtılmış önbellek" olarak adlandırılmasına rağmen, MemCache'nin kendisi dağıtılmış işlevlere sahip değildir , MemCache kümeleri birbirleriyle iletişim kurmayacaktır (bunun aksine, bir sunucuda önbellek veri güncellemeleri olduğunda, kümedeki diğer makinelere önbelleği güncellemeleri veya önbellek verilerini temizlemeleri için bildirimde bulunacaktır), sözde "dağıtılmış", Yukarıdaki resimdeki akış gibi, tamamen istemci programının gerçekleştirilmesine bağlıdır.
Aynı zamanda, bu resme dayanarak, MemCache yazma önbelleği sürecini bir kez sıralayacağız:
1. Uygulama, önbelleğe alınması gereken verileri girer
2. API, Anahtarı yönlendirme algoritması modülüne girer ve yönlendirme algoritması, Anahtar ve MemCache küme sunucu listesine göre bir sunucu numarası alır
3. MemCache'yi ve IP adresini ve bağlantı noktası numarasını sunucu numarasından alın
4. API, belirtilen numara ile sunucuyla iletişim kurması, sunucuya veri yazması ve dağıtılmış önbelleğin yazma işlemini tamamlaması için iletişim modülünü çağırır.
Okuma önbelleği, yazma önbelleği ile aynıdır. Aynı yönlendirme algoritması ve sunucu listesi kullanıldığı sürece, uygulama aynı anahtarı sorguladığı sürece, MemCache istemcisi verileri okumak için her zaman aynı istemciye erişir, veriler sunucuda önbelleğe alındığı sürece , Önbellek isabetini garanti edebilirsiniz.
Bu MemCache küme yöntemi, bölüm hatası toleransı açısından da değerlendirilir. Düğüm2 düşerse, Düğüm2'de depolanan veriler kullanılamaz. Şu anda, Düğüm0 ve Düğüm1 kümede hala mevcut olduğundan, bir dahaki sefere Düğüm2'de depolanması istendiğinde Key değeri olduğunda, herhangi bir isabet olmamalıdır. Bu sırada, önce veri tabanından önbelleğe alınacak verileri alın, ardından yönlendirme algoritması modülü, Anahtar değerine göre Düğüm0 ve Düğüm1'den bir düğüm seçer ve ilgili verileri içine koyar. Önbellek bir kez daha kullanılabilir.Bu tür bir kümeleme çok iyidir, ancak dezavantajı, maliyetin nispeten büyük olmasıdır.
Bu resim, slab_class, slab, page ve chunk gibi dört kavramı içerir. Aralarındaki ilişki şu şekildedir:
1. MemCache, bellek alanını bir döşeme grubuna böler
2. Her bir levhanın altında birkaç sayfa vardır, her sayfa varsayılan olarak 1M'dir, bir levha 100M bellek kaplarsa, bu levhanın altında 100 sayfa olmalıdır.
3. Her sayfa bir dizi parça içerir. Yığın, verilerin gerçekte depolandığı yerdir.Aynı döşemedeki yığının boyutu sabittir.
4. Aynı boyutta parçalara sahip levhalar birlikte düzenlenir ve slab_class olarak adlandırılır.
MemCache'nin bellek ayırma yöntemine ayırıcı adı verilir. Döşeme sayısı, başlangıç parametrelerinin yapılandırmasıyla ilgili olarak birkaç, bir düzine veya düzinelerce sınırlıdır.
MemCache'deki değerin depolandığı yer değerin boyutuna göre belirlenir.Değer her zaman yığın boyutuna en yakın döşemede depolanır.Örneğin, döşeme yığın boyutu 80 bayt ve döşeme yığın boyutu 100 sözcüktür. Kesit ve döşemenin yığın boyutu 128 bayttır ( Bitişik döşemelerdeki yığınlar temelde 1.25 oranında büyür ve bu, MemCache başladığında -f ile belirtilebilir. ), ardından 88 baytlık bir değerin üzerine gelin, bu değer 2 numaralı levhaya yerleştirilecektir. Bir döşeme yerleştirirken, döşeme önce bellek için başvurmalıdır Hafıza uygulaması sayfalara dayanmaktadır Bu nedenle, ilk veri yerleştirilirken, boyutuna bakılmaksızın, döşemeye 1M'lik bir sayfa tahsis edilecektir. Sayfa için başvurduktan sonra, döşeme, sayfanın belleğini öbeğin boyutuna göre böler, böylece bir öbek dizisi olur ve son olarak veri depolamak için öbek dizisinden birini seçer.
Ya bu döşemede ayrılabilecek yığın yoksa? MemCache -M eklenmeden başlatılırsa (LRU yasaklanmıştır, bu durumda bellek yeterli değildir ve Bellek Yetersiz hatası bildirilecektir), MemCache en son kullanılan parçayı bu döşemeye koyacaktır. Verileri temizleyin ve ardından en son verileri yerleştirin.
Alan sınırlıdır ve memcache ile ilgili içerik burada özetlenmiştir. Devops ve DBA hakkında daha fazlasını daha sonra paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~