2014-12-10 2 views
18

캐시 된 데이터를 가져 오기위한 거의 모든 장고보기에서 쿼리하는 Redis 서버가 있습니다. 일부 stackoverflow 질문에 대한 독서를 한 모든 웹 요청마다 r = redis.StrictRedis(host='localhost', port=6379, db=0) 통해 새 Redis 연결을 만드는 나쁜 및 연결 풀링을 사용해야합니다 것을 배웠습니다.Django & Redis : 연결 풀링을 올바르게 사용하려면 어떻게해야합니까?

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

:이 전역 변수처럼 그대로

settings.py에서

그래서 어떤 장고보기 쉽게 올려 수 있습니다 여기에

장고에서 연결 풀링에 대한 내가 해낸 방법입니다 일부 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 

그래서, 내 질문은 :이 장고에 연결 풀링을 할 수있는 올바른 방법인가? 비슷한 시나리오를 경험 한 사람들을 위해 더 나은 접근 방법이 있습니까? 이것은 모든 요청에 ​​대해 새 연결을 열고 닫는 기존 방식보다 낫습니다.

EDIT :이 모든 요청에 ​​대해 새 연결을 여는 것이 왜 잘못 되었는가에 대한 이해를 얻었습니다. stackoverflow question.

답변

1

더 좋은 방법은 Django redis cache 응용 프로그램과 함께 당신의 장고의 캐시 백엔드로 설정 레디 스하는 것입니다. 그것은 당신에게 당신의 문제에 대한 해답을 제공하고 캐시 된 정보를 얻거나 설정할 때마다 Django의 공식 캐시 라이브러리를 사용하여 redis에 접근 할 수 있습니다. 또한 캐시 백엔드를 다른 것으로 변경할 경우 응용 프로그램의 호환성 문제를 피할 수 있습니다.

여기에 튜토리얼을 따라하기 쉽게 : 이것은 하나의 DB에 대한 좋은 해결책처럼 보인다

Using Redis as Django's session store and cache backend

+0

. 'django.core.cache import cache'를 통해 작업을 수행 할 때 여러 DB를 지정하거나 DB간에 전환하는 방법에 대한 아이디어가 있습니까? 내가 Django redis cache docs를 읽었을 때 우리는 하나의 DB만을 지정할 수있다. – user1757703

+0

글쎄, DB 수는 12로 제한되어 있습니다. 키 접두사를 사용하는 것이 훨씬 쉽습니다. 당신은 자신의 도우미 방법을 써서 많이 들키지 않고 도달 할 수 있습니다. 왜 그런 식으로 DB를 배가 할 필요가 있습니까? – martincpt

+0

데이터 형식에 따라 여러 데이터베이스로 데이터를 구성하기 때문에 여러 개의 DB가 필요합니다. – user1757703

관련 문제