Önbelleği vs belleği doğrudan kullanma


142

Henüz Redis kullanmadım, ama duydum ve önbellek depolama olarak denemeyi planlıyorum.

Redis'i belleği önbellek deposu veritabanı olarak kullandığını duydum, bu yüzden veri depolamak için bir değişkeni nesne veya sözlük veri türü olarak kullanmamın farkı nedir? sevmek:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Redis'in avantajı nedir?

Yanıtlar:


222

Redis bir uzak veri yapısı sunucusudur. Verileri yerel bellekte depolamaktan kesinlikle daha yavaştır (çünkü verileri almak / saklamak için soket gidiş dönüşlerini içerir). Bununla birlikte, bazı ilginç özellikler de getiriyor:

  • Redislere, muhtemelen birkaç düğümde çalışan (yerel belleğin başaramayacağı bir şey), uygulamalarınızın tüm süreçlerine erişilebilir.

  • Redis bellek depolaması oldukça verimlidir ve ayrı bir işlemle yapılır. Uygulama, hafızası çöp toplanan bir platformda çalışıyorsa (node.js, java, vb.), Çok daha büyük bir bellek önbelleği / deposunun kullanılmasına izin verir. Uygulamada, çok büyük yığınlar toplanan çöplerle iyi performans göstermez.

  • Redis, gerekirse diskteki verileri saklayabilir.

  • Redis, basit bir önbellekten biraz daha fazlasıdır: çeşitli veri yapıları, çeşitli öğe tahliye politikaları, engelleme kuyrukları, pub / sub, atomisite, Lua komut dosyası vb.

  • Redis, yüksek kullanılabilirlik sağlamak için etkinliğini bir master / slave mekanizma ile çoğaltabilir.

Temel olarak, uygulamanızın aynı verileri paylaşan birkaç düğümde ölçeklendirilmesi gerekiyorsa, Redis (veya başka bir uzaktan anahtar / değer deposu) gibi bir şey gerekecektir.


5
Son noktanız özellikle Rlite gibi şeylerin biraz anlamsız göründüğünü gösteriyor - bir sözlük mağazası, tek bir işleminiz olan çoğu kullanım durumunda da uygun olacaktır. Bu doğru mu?
naught101

1
Evet. IMO Rlite'ın ilgisi oldukça sınırlıdır.
Didier Spezia

Bu ipuçları için teşekkürler, bu yüzden Redis ölçeklemek harika ama hatırlamak için ortalama 300 - 500 nesnesi ile basit bir chat'app durumunda, bellek içi veri yapısı bu yana daha hızlı değilse çok iyi iş yapacak az sayı?
Webwoman

2
@DidierSpezia very large heaps do not perform well with garbage collected languagesnedenini açıklayabilir misiniz?
roottraveller

1
@roottraveller, bunun çöp toplama işleminin genellikle yığın belleğini boşaltmak için uygulamanızın yürütülmesini ("dünyayı durdur") durdurması gerektiğine ve yığın ne kadar büyük olursa, bu kesintinin genellikle daha uzun süreceğine inanıyorum.
Regorsmitz

3

Şu anda her isteğin farklı bir kapsayıcıya gidebildiği sunucu daha az mimariye daha çok ilgi duyuyoruz.Bu durumda redis çok önemli bir rol oynayabilir.

Basit önbelleği sunucuda daha az kullanamayız, çünkü isteğimiz basit önbelleğimizin depolandığı kapta sunulduğundan emin olamayız.

Bu durumda, önbelleği uzak bir yerde sakladığı için redis'i kullanmalıyız ve sunucudan daha az mimaride kap değişikliklerine bile erişebiliriz.

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.