Redis'i Django ile nasıl kullanabilirim?


96

Redis-cache'i duydum ama tam olarak nasıl çalışıyor? Bir şekilde rdbms sorgularını önbelleğe alarak django ve rdbms'lerim arasında bir katman olarak mı kullanılıyor?

Yoksa doğrudan veritabanı olarak mı kullanılması gerekiyor? Şüpheliyim ki, o github sayfası herhangi bir giriş detayını kapsamadığı için, kurulum yok .. sadece bazı yapılandırma özelliklerini ayarlamanızı söylüyor.

Yanıtlar:


74

Redis için bu Python modülünün benioku dosyasında net bir kullanım örneği vardır: http://github.com/andymccurdy/redis-py

Redis, bir RAM önbelleği olacak şekilde tasarlanmıştır. Temel GET ve SET anahtarlarının yanı sıra sözlükler gibi koleksiyonların depolanmasını destekler. RDBMS sorgularını, çıktılarını Redis'de depolayarak önbelleğe alabilirsiniz. Amaç, Django sitenizi hızlandırmak olacaktır. Hıza ihtiyacınız olana kadar Redis veya başka bir önbellek kullanmaya başlamayın - zamanından önce optimize etmeyin.


Ancak redis önbelleğinin güncellenmesi gerekip gerekmediğini nasıl kontrol edersiniz? Kayıt sayısını karşılaştırıyor musunuz yoksa daha iyi bir yol var mı?
Marconi

7
Bu genellikle anahtar için bir TTL ayarlayarak yapılır: redis.io/commands/ttl . Anahtarın süresi dolarsa, DB'ye gitmelisiniz. Yani anahtar redis içindeyse, onu kullanırsınız. Bunun basit bir şekilde uygulanmasının bazı sorunlara neden olduğuna dikkat edin: popüler bir anahtarın süresi dolduğunda en.wikipedia.org/wiki/Thundering_herd_probleminiz var , en.wikipedia.org/wiki/Negative_cache kullanmak istiyorsunuz ve DB'niz en.wikipedia'ya ihtiyaç duyuyor . org / wiki / Admission_control
Spike Gronim

4
Umm, pekala, a) Redis, RAM önbelleğinden daha fazlası olacak şekilde tasarlanmıştır - kalıcıdır (ancak önbellek için özellikler içerir), b) basit anahtar-değer depolamasından daha fazlasıdır - yerleşik manipülasyonlara sahip listeler, karma kümeler vb.
Olli

8
Dürüst olmak gerekirse, model / yanıt nesnelerini önbelleğe almak, erken optimizasyon kapsamına girmez. Bunu yapmak için ücretlendirilmediğiniz sürece (heroku'da olduğu gibi), küçük uygulamalar için bile önbelleğe almaktan zarar gelmez.
vikki

1
Hızla ilgili değil, kaynaklarla ilgili. Önbellekteki bir tablo daha ucuz olacaktır.
dman

60

Redis'in bir şeyleri bellekte depolaması, bunun bir önbellek olması gerektiği anlamına gelmez. Veri için kalıcı bir depo olarak kullanan insanlar gördüm.

Önbellek olarak kullanılabilmesi, yüksek performanslı bir depolama olarak kullanışlı olduğuna dair bir ipucudur. Redis sisteminiz, diske yeniden yazılmamış verileri kaybedebileceğiniz halde kapanırsa. Bu tür tehlikeleri azaltmanın bazı yolları vardır, örneğin çalışırken bekleme kopyası. Verileriniz, bir banka veya mağaza işletiyorsanız olduğu gibi 'görev açısından kritik' ise, Redis sizin için en iyi seçim olmayabilir. Ancak, kalıcı canlı veriler veya bazı sosyal etkileşim unsurları içeren yüksek trafikli bir oyun yazarsanız ve veri kaybı olasılığını oldukça kabul edilebilir hale getirirseniz, Redis bir göz atmaya değer olabilir.

Her neyse, konu kalır, evet, Redis bir veritabanı olarak kullanılabilir.


3
Şirketim için, Cassandra & Postgres'ten oluşturulan özet ve ürünleri saklamak için Redis kullanıyoruz. Bu ürünlerin miktarı (birkaç milyar), ne sıklıkla değiştirilmeleri gerektiği ve her an neye ihtiyaç duyulduğunu asla bilemeyecek olmamız, onları yeniden kullanım için mükemmel bir uyum haline getiriyor. Ayrıca, bir SQL veritabanında bir milyon satırın üzerine çıktığınızda, redis üyelik testi için harika bir tamamlayıcı kaynak olabilir (ör. Bu varlıklar bu etki alanında mı?)
David

Birkaç ay önce tam olarak aynı noktayı ortaya koyan cevabımın neden sizinkiler tarafından sıçrandığını merak etmeden duramıyorum ... Oh peki.
ostergaard

22

Redis, temelde bir sürü çan ve ıslık içeren bir 'bellekte' KV mağazasıdır. Son derece esnektir. Bir önbellek gibi geçici bir mağaza veya bir veritabanı gibi kalıcı bir mağaza olarak kullanabilirsiniz (diğer yanıtlarda belirtildiği gibi uyarılarla birlikte).

Django ile birleştirildiğinde, Redis için en iyi / en yaygın kullanım durumu muhtemelen 'yanıtları' ve oturumları önbelleğe almaktır.

Burada bir arka uç var https://github.com/sebleier/django-redis-cache/ ve buradaki Django belgelerinde mükemmel belgeler var: https://docs.djangoproject.com/en/1.3/topics/cache/ .

Önbelleğimi izlemek için yakın zamanda https://github.com/erussell/django-redis-status kullanmaya başladım - harika çalışıyor. (Redis üzerinde maxmemory yapılandırın yoksa sonuçlar o kadar da kullanışlı olmaz).


5

Redis'i Django uygulamanızda dağıtılmış görevler için bir kuyruk olarak da kullanabilirsiniz. Celery veya Python RQ için mesaj komisyoncusu olarak kullanabilirsiniz .


2

Birincil veritabanı olarak Redis

Evet, Redis anahtar-değer deposunu birincil veritabanı olarak kullanabilirsiniz. Red, yalnızca anahtar / değer çiftlerini depolamakla kalmaz, aynı zamanda aşağıdaki gibi farklı veri yapılarını da destekler:

  1. Liste
  2. Ayarlamak
  3. Sıralanmış küme
  4. Hashes
  5. Bit eşlemler
  6. Hiperlog günlükleri

Redis Veri türleri Resmi belge

Redis bellek anahtar-değer deposundadır, bu nedenle Redis sunucu arızası meydana gelirse verilerinizin kaybolacağını bilmelisiniz.

Redis ayrıca veri kontrolü resmi belgesini de sürdürebilir.

Redis Persistence Resmi belgesi


Önbellek Olarak Redis

Evet Redis, Django ve RDBMS arasında bulunur.

Nasıl çalışır

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

Django'nun önbellek çerçevesi Resmi Dokümanı


Redis'i Django ile nasıl kullanabilirim?

Redis python istemci redis-py kullanabiliriz Django uygulaması için kullanabiliriz.

Redis python istemcisi redis-py Github

Django-redis kullanabilirizDjango önbellek arka ucu için .

Django-redis , redis-py üzerine inşa ve django uygulamasıyla ilgili ekstra özellikler .

Django-redis doc Github

Başka kütüphaneler de mevcuttur.


Redis kullanım durumları ve veri türleri

Bazı kullanım durumları

  • Oturum önbelleği
  • Gerçek zamanlı analiz
  • Web önbelleğe alma
  • Liderler

Temel Veri yapısı türlerine göre En İyi Redis Kullanım Örnekleri


Redis kullanan büyük teknoloji şirketleri

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

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.