Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Jika redis sudah menjadi bagian dari tumpukan, mengapa Memcached masih digunakan bersama Redis?

Alasan utama yang saya lihat hari ini sebagai kasus penggunaan untuk memcached melalui Redis adalah efisiensi memori superior yang seharusnya bisa Anda dapatkan dengan polos Caching fragmen HTML (atau aplikasi serupa). Jika Anda perlu menyimpan berbagai bidang objek Anda dalam kunci memcache yang berbeda, maka hash Redis akan lebih hemat memori, tetapi ketika Anda memiliki banyak kunci -> pasangan simple_string, memcached harus dapat memberi Anda lebih banyak item per megabita.

Hal-hal lain yang merupakan poin bagus tentang memcached:

  • Ini adalah bagian kode yang sangat sederhana, jadi jika Anda hanya membutuhkan fungsionalitas yang disediakannya, saya rasa ini adalah alternatif yang masuk akal, tetapi saya tidak pernah menggunakannya dalam produksi.
  • Ini multi-utas, jadi jika Anda perlu menskalakan dalam pengaturan satu kotak, itu adalah hal yang baik dan Anda perlu berbicara hanya dengan satu contoh.

Saya percaya bahwa Redis sebagai cache semakin masuk akal saat orang beralih ke cache cerdas atau ketika mereka mencoba mempertahankan struktur data yang di-cache melalui struktur data Redis.

Perbandingan antara Redis LRU dan memcached LRU.

Memcached dan Redis tidak melakukan pengusiran LRU yang sebenarnya, tetapi hanya perkiraan saja.

Pengusiran memcache adalah kelas per ukuran dan bergantung pada detail implementasi pengalokasi slabnya. Misalnya jika Anda ingin menambahkan item yang sesuai dengan kelas ukuran tertentu, memcached akan mencoba menghapus item kedaluwarsa/tidak-baru-baru ini digunakan di kelas itu, alih-alih mencoba upaya global untuk memahami objek apa, terlepas dari objeknya. ukuran, yang merupakan kandidat terbaik.

Redis malah mencoba untuk memilih objek yang baik sebagai kandidat untuk penggusuran ketika maxmemory batas tercapai, melihat semua objek, terlepas dari kelas ukurannya, tetapi hanya mampu memberikan objek yang kira-kira bagus, bukan objek terbaik dengan waktu idle yang lebih besar.

Cara Redis melakukannya adalah dengan mengambil sampel beberapa objek, memilih objek yang tidak digunakan (tidak diakses) untuk waktu yang lama. Sejak Redis 3.0 (saat ini dalam versi beta) algoritme ditingkatkan dan juga mengambil kumpulan kandidat yang baik di seluruh penggusuran, sehingga perkiraannya ditingkatkan. Dalam dokumentasi Redis, Anda dapat menemukan deskripsi dan grafik dengan detail tentang cara kerjanya.

Mengapa memcached memiliki jejak memori yang lebih baik daripada Redis untuk string sederhana -> peta string.

Redis adalah bagian dari perangkat lunak yang lebih kompleks, sehingga nilai dalam Redis disimpan dengan cara yang lebih mirip dengan objek dalam bahasa pemrograman tingkat tinggi:mereka memiliki tipe terkait, pengkodean, penghitungan referensi untuk manajemen memori. Ini membuat struktur internal Redis bagus dan mudah dikelola, tetapi memiliki overhead dibandingkan dengan memcached yang hanya menangani string.

Saat Redis mulai lebih hemat memori

Redis mampu menyimpan tipe data agregat kecil dengan cara hemat memori khusus. Misalnya Redis Hash kecil yang mewakili suatu objek, disimpan secara internal bukan dengan tabel hash, tetapi sebagai gumpalan unik biner. Jadi menyetel beberapa bidang per objek menjadi hash lebih efisien daripada menyimpan N kunci yang dipisahkan ke dalam memcached.

Sebenarnya, Anda dapat menyimpan objek ke dalam memcached sebagai satu gumpalan JSON (atau dikodekan biner), tetapi bertentangan dengan Redis, ini tidak akan memungkinkan Anda untuk mengambil atau memperbarui bidang independen.

Keuntungan Redis dalam konteks caching cerdas.

Karena struktur data Redis, pola yang biasa digunakan dengan memcached untuk menghancurkan objek saat cache tidak valid, untuk membuatnya kembali dari DB nanti, adalah cara primitif menggunakan Redis.

Misalnya, bayangkan Anda perlu menyimpan berita N terbaru yang diposting ke dalam Berita Peretas untuk mengisi bagian "Terbaru" situs. Apa yang Anda lakukan dengan Redis adalah membuat daftar (dibatasi hingga M item) dengan berita terbaru yang dimasukkan. Jika Anda menggunakan penyimpanan lain untuk data Anda, dan Redis sebagai cache, yang Anda lakukan adalah mengisi keduanya tampilan (Redis dan DB) saat item baru diposting. Tidak ada pembatalan cache.

Namun aplikasi selalu dapat memiliki logika sehingga jika daftar Redis ditemukan kosong, misalnya setelah startup, tampilan awal dapat dibuat ulang dari DB.

Dengan menggunakan caching cerdas dimungkinkan untuk melakukan caching dengan Redis dengan cara yang lebih efisien dibandingkan dengan memcached, tetapi tidak semua masalah cocok untuk pola ini. Misalnya, caching fragmen HTML mungkin tidak mendapat manfaat dari teknik ini.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. meneruskan hasil ke perintah lain di redis

  2. Berlangganan python redis tidak bisa mendapatkan semua data?

  3. Jika redis sudah menjadi bagian dari tumpukan, mengapa Memcached masih digunakan bersama Redis?

  4. Berlangganan ke beberapa saluran dengan utas yang sama Jedis

  5. Akses redis secara lokal di docker - docker compose