Memcached Nedir? – 2023

Memcached, ücretsiz ve açık kaynaklı, yüksek performanslı bir bellek önbelleğe alma sistemidir . Genellikle uygulama performansını artırmak için veritabanı verilerini, API çağrılarını veya sayfa işleme parçalarını RAM’de önbelleğe almak için kullanılır.

Bir sayı kadar küçük veya tamamlanmış bir HTML sayfası kadar büyük veri depolayabilir .

Sistem , TCP aracılığıyla erişilmek üzere tasarlanmıştır , böylece ayrı bir sunucuda çalışabilir ve ayrıca birkaç sunucu arasında dağıtılabilir, bu da verileri depolamak için büyük bir karma tablo oluşturur.

Alan tükendiğinde, eski verilerin üzerine yazılır. Bu nedenle, geçici (sürekli olmayan) bir önbellek olarak ele alınmalıdır , yani verileriniz hala orada olmayabilir.

Kurulum

macOS kullanıyorsanız, Homebrew kullanarak Memcached’i kurmak çok kolaydır :

$ demlemek memcached'i kurun

Sonra bu komutu kullanarak başlatabilirsiniz :

$ /usr/yerel/opt/memcached/bin/memcached

Linux kullanıyorsanız , dağıtımınızın paket yöneticisini kullanarak kolayca kurabilirsiniz.

Bağlanıyor

Varsayılan bağlantı noktası 11211’dir. Telnet kullanarak bağlanmayı deneyelim :

$ telnet localhost 11211 
127.0.0.1 deneniyor... 
Localhost'a bağlandı. 
Çıkış karakteri '^]'.

Harika! Sunucu açık. Şimdi Telnet’ten çıkın (komutu kullanarak ) ve sunucuyla daha rahat etkileşim kurmak için bir Ruby taşıquit yükleyelim :

mücevher yüklemek dalli

Bir Ruby konsolu ( irb) çalıştırın ve varsayılan bağlantı noktasını kullanarak sunucuya bağlanın :

'dalli' 
önbelleği gerektirir = Dalli::Client.new('localhost') 
=> #<Dalli::Client:0x007f999d867e80 @servers=["localhost"], @options={}, @ring=nil>

Temel depolama

Memcached ile bir dizge saklayarak oynamaya başlayalım ve sonra onu alalım:

cache.set 'selam', 'merhaba' 
cache.get 'selam' 
=> "merhaba"

Gördüğünüz gibi, zaten varsa üzerine yazılacak olan bir key’e bir değer ayarlamakset için kullanılır . anahtar değerini almak için kullanılır .get

Veriler ayrıca saniye cinsinden bir süre ile sınırlandırılabilir:

cache.set 'selam', 'merhaba', 5 
cache.get 'selam' 
=> "merhaba" 
uyku 5 
cache.get 'selam' 
=> nil

kullanılarak benzersiz bir sorguda birden fazla değer elde edilebilirget_multi ve bu da bir hash ile sonuçlanır:

cache.set 'selam1', 'merhaba' 
cache.set 'selam2', 'günaydın' 
cache.get_multi 'selam1', 'selam2' 
=> {"selam1"=>"merhaba", "selam2"=>"iyi Sabah"}

Bu selamları silerek hafızayı biraz boşaltalım :

cache.delete 'selam1' 
önbellek.delete 'selam2' 
önbellek.get_multi 'selam1', 'selam2' 
=> {}

Tüm anahtarları silmek istiyorsanız, flushihtiyacınız olan işlem:

önbellek.flush 
=> [true]

Veri ekleme

setAnahtar zaten varsa , komut değerin üzerine yazar:

cache.set 'selam', 'merhaba' 
cache.get 'selam' 
=> "merhaba" 
cache.set 'selam', 'günaydın' 
cache.get 'selam' 
=> "günaydın"

Bundan kaçınmak için, bunun yerine, anahtar yoksa değeri oluşturacakadd olan komut kullanılabilir :

# Mevcut bir anahtarın (önceki kod bloğunda tanımlanan) üzerine yazmaz 
cache.add 'greet', 'iyi akşamlar' 
cache.get 'greet' 
=> "günaydın"# Yeni anahtarlar için değer oluşturur 
cache.add 'greet2', 'iyi akşamlar' 
=> "iyi akşamlar"

Verileri değiştirme

replacemevcut bir anahtarın verilerini değiştirmek için kullanılır:

cache.replace 'selam', 'merhaba!' 
cache.get 'selam' 
=> "merhaba!"

Ancak anahtar yoksa hiçbir şey yapmaz :

cache.replace 'mevcut olmayan selam', 'merhaba!' 
=> sıfır

Verileri ekleme ve başa ekleme

Verileri eklemek veya başa eklemek için Dalli , verilerin önceden raw olarak ayarlanmasını gerektirir :

cache.set 'selam', 'merhaba', 0, ham: doğru

Şimdi şunu ekleyebiliriz :

cache.append 'selam', '!' 
cache.get 'selam' 
=> "merhaba!"

Ve başına :

cache.prepend 'selam', 'hey! ' 
cache.get 'selam' 
=> "Merhaba! Merhaba!"

Artırma ve azaltma verileri

Bir başka faydalı durum da bir sayaca sahip olmaktır , böylece artırılabilir veya azaltılabilir.

cache.set 'counter', 1, 0, ham: true 
cache.incr 'counter' 
=> 2 
cache.incr 'counter', 2 
=> 4 
cache.decr 'counter' 
=> 3 
cache.decr 'counter', 3 
=> 0

Kontrol et ve ayarla

Eşzamanlı herhangi bir müşteri tarafından güncellenebilecek bir değere sahip olduğunuzu düşünün (aynı anda güncellemeye çalışın). Bu sorun olmaz mıydı? casBu , değerin güncellenmeden önce diğer istemci tarafından değiştirilip değiştirilmediğini kontrol eden işlem kullanılarak kontrol edilebilen bir yarış durumudur.

Bir işlem gibi çalışır set, ancak bir blok gerektirir :

cache.set 'config', 'foo' 
cache.cas('config') { 'bar' } 
cache.get 'config' 
=> "bar"

Bu nedenle, bu atomik bir işlemdir .

Çözüm

Memcached’in ne olduğunu ve doğrudan Dalli taşı kullanılarak nasıl kullanılabileceğini gördük . Basit görünebilir, ancak YouTube , Reddit , Facebook , Twitter ve Wikipedia gibi birçok önemli şirketin yaptığı gibi büyük bir web uygulamasının daha hızlı çalışmasına yardımcı olabilir .

Bazen , örneğin özel ihtiyaçları olan bir hizmet geliştirirken doğrudan Memcached ile çalışmak çok önemlidir . Çerçevenin ( örneğin Ruby on Rails ), Dalli gibi bir taş kullanarak önbelleğini Memcached’de depolayabildiği başka zamanlar da vardır .

Yorum yapın