2014-12-10 23 views
18

Önbelleğe alınmış bazı verileri almak için neredeyse her Django görünümünde sorguladığım bir Redis sunucum var. Bazı stackoverflow soruları üzerinde biraz okuma yaptım ve her bir web isteği için r = redis.StrictRedis(host='localhost', port=6379, db=0) üzerinden yeni bir Redis bağlantısı yapmanın kötü olduğunu ve bağlantı havuzu kullanmam gerektiğini öğrendim.Django & Redis: Bağlantı havuzlamasını nasıl düzgün kullanırım?

# Redis Settings 
import redis 
REDIS_CONN_POOL_1 = redis.ConnectionPool(host='localhost', port=6379, db=0) 

: Bu genel değişken gibi olduğu gibi

settings.py yılında

yüzden herhangi Django görünümünde kolayca indirebiliriz: Burada

Django bağlantı havuzu için ben ile geldi yaklaşımdır bazı views.py:

from django.conf import settings 
REDIS_CONN_POOL_1 = settings.REDIS_POOL_1 
r = redis.Redis(connection_pool=REDIS_CONN_POOL_1) 
r.get("foobar") # Whatever operation 

Yani, sorum şu: Bu Django bağlantı havuzu yapmak doğru yolu mu? Benzer bir senaryoyu yaşayanlar için kullandığınız daha iyi yaklaşımlar var mı? Bu muhtemelen her isteğimde yeni bir bağlantıyı açmak ve kapatmak için eski yaklaşımımdan daha iyidir.

DÜZENLEME: Bu stackoverflow question numaralı telefondan her istekte yeni bir bağlantı açmanın neden yanlış olduğunu anladım.

cevap

1

Daha iyi bir yaklaşım Django redis cache uygulamasıyla Django'nın önbellek arka uç olarak kurulum REDIS olacaktır. Sorunuz için size bir çözüm sunar ve önbelleğe alınmış bilgileri almak veya ayarlamak istediğinizde Django'nun resmi önbellek kitaplığını redis'e ulaşmak için kullanabilirsiniz. Önbellek arka ucunuzu başka bir şeye değiştirmeye karar verirseniz, uygulamanızda uyumluluk sorunlarından da kaçınabilirsiniz.

İşte öğretici takip etmek kolay değil: Bu, bir DB için iyi bir çözüm gibi görünüyor

Using Redis as Django's session store and cache backend

+0

. "Django.core.cache import cache'den" ile işlemler gerçekleştirirken birden çok DB'nin nasıl belirtileceği veya DB'ler arasında nasıl geçiş yapacağına dair herhangi bir fikriniz var mı? Django redis önbellek dokümanlarını okuduğumdan, yalnızca tek bir DB belirtebiliriz. – user1757703

+0

Peki DB sayısı redis 12 ile sınırlıdır. Anahtar öneklerini kullanmak çok daha kolay olur. Çok fazla sorun yaşamadan onlara ulaşmak için kendi yardımcı yöntemlerinizi bile yazabilirsiniz. Bu arada neden çoğul DB'lere ihtiyacınız var? – martincpt

+0

Birden çok DB'ye ihtiyacım var çünkü veriyi, veri türüne göre birden çok DB'ye organize ediyorum. – user1757703

İlgili konular