Redis cache vs menggunakan memori secara langsung

148

Saya belum menggunakan Redis, tetapi saya mendengarnya dan berencana untuk mencobanya sebagai penyimpanan cache.

Saya mendengar Redis menggunakan memori sebagai database penyimpanan cache, jadi apa bedanya jika saya menggunakan variabel sebagai objek atau tipe data kamus untuk menyimpan data? Suka:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Apa keunggulan yang dimiliki Redis?

hh54188
sumber

Jawaban:

230

Redis adalah server struktur data jarak jauh . Ini tentunya lebih lambat daripada hanya menyimpan data dalam memori lokal (karena ini melibatkan bolak-balik soket untuk mengambil / menyimpan data). Namun, ini juga membawa beberapa properti menarik:

  • Redis dapat diakses oleh semua proses aplikasi Anda, mungkin berjalan pada beberapa node (sesuatu yang tidak dapat dicapai oleh memori lokal).

  • Penyimpanan memori Redis cukup efisien, dan dilakukan dalam proses terpisah. Jika aplikasi berjalan pada platform yang memorinya dikumpulkan (node.js, java, dll ...), ini memungkinkan penanganan cache / penyimpanan memori yang jauh lebih besar. Dalam praktiknya, heap yang sangat besar tidak berfungsi baik dengan bahasa yang dikumpulkan dari sampah.

  • Redis dapat menyimpan data di disk jika diperlukan.

  • Redis sedikit lebih dari sekadar cache: ia menyediakan berbagai struktur data, berbagai kebijakan penggusuran item, antrean pemblokiran, pub / sub, atomicity, skrip Lua, dll ...

  • Redis dapat mereplikasi aktivitasnya dengan mekanisme master / slave untuk mengimplementasikan ketersediaan tinggi.

Pada dasarnya, jika Anda membutuhkan aplikasi Anda untuk menskalakan pada beberapa node yang berbagi data yang sama, maka sesuatu seperti Redis (atau penyimpanan kunci / nilai jarak jauh lainnya) akan diperlukan.

Didier Spezia
sumber
5
Poin terakhir Anda secara khusus membuatnya tampak seperti hal-hal seperti Rlite agak tidak berguna - toko kamus akan sama cocoknya dalam kebanyakan kasus penggunaan di mana Anda memiliki satu proses. Apakah itu benar?
n nothing101
1
Iya. Minat IMO Rlite sangat terbatas.
Didier Spezia
terima kasih atas petunjuk ini, jadi Redis sangat bagus untuk diskalakan tetapi saya berasumsi dalam kasus aplikasi obrolan sederhana dengan rata-rata 300 - 500 objek untuk diambil dalam memori, struktur data dalam memori akan melakukan pekerjaan dengan sangat baik jika tidak lebih cepat sejak ini Apakah angka kecil?
Wanita web
2
@DidierSpezia very large heaps do not perform well with garbage collected languagesbisa jelaskan kenapa?
roottraveller
2
@roottraveller, saya yakin ini karena proses pengumpulan sampah umumnya harus mengganggu eksekusi aplikasi Anda ("stop-the-world") untuk membebaskan memori heap, dan semakin besar heap, semakin lama gangguan ini biasanya berlangsung.
Regorsmitz
4

Saat ini kami lebih tertarik pada arsitektur tanpa server di mana setiap permintaan dapat masuk ke wadah yang berbeda. Dalam hal ini redis dapat memainkan peran yang sangat penting.

Kami tidak dapat menggunakan cache sederhana di server lebih sedikit karena kami tidak dapat memastikan permintaan kami dilayani di wadah yang sama tempat cache sederhana kami disimpan.

Dalam kasus ini, kita harus menggunakan redis karena ia menyimpan cache di lokasi yang jauh & kita dapat mengaksesnya bahkan dalam wadah perubahan dalam arsitektur tanpa server.

Ashish Bainade
sumber