Bagaimana saya dapat menggunakan redis dengan Django?

95

Saya pernah mendengar tentang redis-cache tetapi bagaimana tepatnya cara kerjanya? Apakah ini digunakan sebagai lapisan antara django dan rdbms saya, dengan cara meng-cache permintaan rdbms?

Atau seharusnya digunakan langsung sebagai database? Yang saya ragu, karena halaman github itu tidak mencakup detail login, tidak ada pengaturan .. hanya memberitahu Anda untuk mengatur beberapa properti config.

meder omuraliev
sumber

Jawaban:

72

Modul Python untuk Redis ini memiliki contoh penggunaan yang jelas di readme: http://github.com/andymccurdy/redis-py

Redis dirancang untuk menjadi cache RAM. Ini mendukung GET dasar dan SET kunci ditambah penyimpanan koleksi seperti kamus. Anda dapat menyimpan kueri RDBMS ke cache dengan menyimpan keluarannya di Redis. Tujuannya adalah untuk mempercepat situs Django Anda. Jangan mulai menggunakan Redis atau cache lainnya hingga Anda membutuhkan kecepatan - jangan optimalkan sebelum waktunya.

Spike Gronim
sumber
Tetapi bagaimana Anda memeriksa bahwa cache di redis perlu diperbarui? Apakah Anda membandingkan jumlah rekor atau apakah ada cara yang lebih baik?
Marconi
7
Ini biasanya dilakukan dengan menyetel TTL untuk kunci: redis.io/commands/ttl . Jika kuncinya kedaluwarsa, Anda harus pergi ke DB. Jadi jika kuncinya ada di redis, maka Anda menggunakannya. Perhatikan bahwa penerapan sederhana ini menyebabkan beberapa masalah: ketika kunci populer kedaluwarsa, Anda memiliki en.wikipedia.org/wiki/Thundering_herd_problem , Anda ingin menggunakan en.wikipedia.org/wiki/Negative_cache , dan DB Anda memerlukan en.wikipedia. org / wiki / Admission_control
Spike Gronim
4
Umm, baiklah, a) Redis dirancang untuk menjadi lebih dari cache RAM - itu persisten (tetapi termasuk fitur untuk cache), b) itu lebih dari sekadar penyimpanan nilai kunci sederhana - ada daftar, hashset dll. Dengan manipulasi bawaan.
Olli
8
Jujur, model cache / objek respons tidak termasuk dalam pengoptimalan prematur. Kecuali Anda dikenakan biaya untuk melakukannya (seperti di heroku), tidak ada salahnya untuk menyimpan cache bahkan untuk aplikasi kecil.
vikki
1
Ini bukan tentang kecepatan, ini tentang sumber daya. Tabel dalam cache akan lebih murah.
dman
60

Hanya karena Redis menyimpan sesuatu di dalam memori tidak berarti bahwa itu dimaksudkan sebagai cache. Saya telah melihat orang menggunakannya sebagai penyimpanan data yang persisten.

Bahwa itu dapat digunakan sebagai cache adalah petunjuk bahwa itu berguna sebagai penyimpanan berkinerja tinggi. Jika sistem Redis Anda mati meskipun Anda mungkin kehilangan data yang tidak ditulis kembali ke disk lagi. Ada beberapa cara untuk mengurangi bahaya tersebut, misalnya replika siaga panas. Jika data Anda 'sangat penting', seperti jika Anda menjalankan bank atau toko, Redis mungkin bukan pilihan terbaik untuk Anda. Tetapi jika Anda menulis game dengan lalu lintas tinggi dengan data langsung yang terus-menerus atau beberapa hal interaksi sosial dan mengelola kemungkinan kehilangan data cukup dapat diterima, maka Redis mungkin layak untuk dilihat.

Pokoknya intinya tetap ya, Redis bisa dijadikan database.

Stefan Schubert-Peters
sumber
3
Untuk perusahaan saya, kami menggunakan Redis untuk menyimpan ringkasan dan produk yang dihasilkan dari Cassandra & Postgres. Jumlah produk ini (beberapa miliar), seberapa sering mereka perlu diubah, dan bahwa kita tidak pernah tahu apa yang dibutuhkan setiap saat membuatnya sangat cocok untuk redis. Selain itu, setelah Anda mencapai lebih dari satu juta baris apa pun dalam SQL db, redis dapat menjadi sumber daya gratis yang bagus untuk pengujian keanggotaan (mis. Apakah entitas ini ada dalam domain ini?)
David
Tidak dapat tidak bertanya-tanya mengapa jawaban saya yang membuat poin yang persis sama beberapa bulan sebelumnya dilompati oleh Anda ... Oh baiklah.
ostergaard
22

Redis pada dasarnya adalah penyimpanan KV 'dalam memori' dengan banyak lonceng dan peluit. Ini sangat fleksibel. Anda dapat menggunakannya sebagai penyimpanan sementara, seperti cache, atau penyimpanan permanen, seperti database (dengan peringatan seperti yang disebutkan dalam jawaban lain).

Ketika dikombinasikan dengan Django kasus penggunaan terbaik / paling umum untuk Redis mungkin untuk menyimpan 'tanggapan' dan sesi.

Ada backend di sini https://github.com/sebleier/django-redis-cache/ dan dokumentasi yang sangat baik dalam dokumen Django di sini: https://docs.djangoproject.com/en/1.3/topics/cache/ .

Saya baru-baru ini mulai menggunakan https://github.com/erussell/django-redis-status untuk memantau cache saya - bekerja dengan sangat baik. (Konfigurasi maxmemory pada redis atau hasilnya tidak terlalu berguna).

ostergaard
sumber
5

Anda juga dapat menggunakan Redis sebagai antrian untuk tugas terdistribusi di aplikasi Django Anda. Anda dapat menggunakannya sebagai perantara pesan untuk Celery atau Python RQ .

Dmitrii Mikhailov
sumber
2

Redis sebagai database Primer

Ya, Anda dapat menggunakan penyimpanan nilai kunci Redis sebagai database utama. Redis tidak hanya menyimpan pasangan nilai-kunci, tetapi juga mendukung berbagai struktur data seperti

  1. Daftar
  2. Set
  3. Set yang diurutkan
  4. Hash
  5. Bitmap
  6. Hyperloglog

Jenis Data Redis Dokumen resmi

Redis ada di penyimpanan nilai kunci memori sehingga Anda harus menyadarinya jika terjadi kegagalan server Redis, data Anda akan hilang.

Redis juga dapat memeriksa data dokumen resmi.

Dok. Resmi Persistensi Redis


Redis sebagai Cache

Ya Redis berada di antara Django dan RDBMS.

Bagaimana itu bekerja

given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page

Kerangka cache Django Official Doc


Bagaimana bisa menggunakan Redis dengan Django

Kita dapat menggunakan klien redis python redis-py untuk aplikasi Django.

Redis klien python redis-py Github

Kita bisa menggunakan Django-redis untuk django cache backend.

Django-redis dibangun di atas redis-py dan menambahkan fitur ekstra terkait dengan aplikasi django.

Django-redis doc Github

Perpustakaan lain juga ada.


Redis kasus penggunaan dan tipe data

Beberapa kasus penggunaan

  • Cache sesi
  • Analisis waktu nyata
  • Caching web
  • Papan Peringkat

Kasus Penggunaan Redis Teratas menurut jenis struktur Data Inti


Perusahaan Teknologi Besar menggunakan Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Tarif Muhammad Faizan
sumber