2010-04-05 2 views
3

우리 애플리케이션은 데이터베이스 서버 풀에서 올바른 데이터베이스 서버를 가져옵니다. 그래서 각 쿼리는 정말이 쿼리이며, 그들은 다음과 같이 :메모리에 MySQLdb 데이터베이스 쿼리 결과 캐시

  1. 이 실행 쿼리

우리는이 그래서 우리는 온라인과 오프라인으로 DB 서버를 취할 수 않는를 올바른 DB 서버

  • 가져 오기 로드 밸런싱뿐 아니라로드 밸런싱도 필요합니다.

    하지만 첫 번째 쿼리는 메모리에 캐시 될 수 있으므로 실제로는 5 ~ 10 분마다 데이터베이스를 쿼리합니다.

    이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

    감사합니다.

    편집이 이것에 대한 당신은 장식을하거나, 첫 번째 쿼리를 저장하고 캐시마다 N의 분을 취소 매번 그것을 돌려

  • 답변

    4

    그냥 캐시 (파이썬 딕셔너리를) 만들 철탑 웹 응용 프로그램입니다 캐시 클래스 eg

    import time 
    
    cache = {} 
    lastTime = time.time() 
    
    def timedCacheDecorator(func): 
    
        def wrap(*args, **kwargs): 
    
         key = str(args)+str(kwargs) 
    
         # cache for 5 seconds 
         global lastTime 
         if key not in cache or time.time() - lastTime > 5: 
          lastTime = time.time() 
          cache[key] = func(*args, **kwargs) 
    
         return cache[key] 
    
        return wrap 
    
    
    # lets test it 
    
    @timedCacheDecorator 
    def myquery(): 
        return time.time() 
    
    print myquery() 
    time.sleep(1) 
    print myquery() 
    time.sleep(5) 
    print myquery() 
    time.sleep(1) 
    print myquery() 
    

    출력 :

    1270441034.58 
    1270441034.58 
    1270441040.58 
    1270441040.58 
    

    지금 그 결과입니다 시간 개까지 캐시하거나 이벤트 개까지 할 수있는 모든 기능을 사용할 수 있습니다이 장식, 나는 그래서이 장식 클래스를 만들 것 캐시 새로 고침 전에 대기하는 데 걸리는 시간 (초)이 소요될 수 있으며 키를 생성하는 최선의 방법을 확인할 수도 있습니다.

    1

    가장 쉬운 방법은 pylons 프레임 워크에 내장 된 라이브러리 인 비커 캐시를 사용하는 것입니다. 모델 클래스 가져 오기에서

    비커 장식 : 데이터베이스 호출이 다음 장식 추가 할 함수 헤더에 다음

    from pylons.decorators.cache import beaker_cache 
    

    :

    @beaker_cache(expire = 300, type='memory') 
    

    변경을가 값을 만료 원하는 초의 양 (현재 5 분으로 설정).