2012-09-14 5 views
0

문자열 값을 사용하여이를 사용자 레코드와 비교하고 일치하는 사용자의 레코드를 반환하는 메서드를 만들었습니다.캐싱 Symfony 사용자 정의 모델 클래스 메서드

내 코드 :

class UsersPeer extends BaseUsersPeer 
{ 
    public static function getHashUser($hash) 
    { 
    $c = new Criteria(); 
    $c->add(UsersPeer::HASH,$hash); 
    return UsersPeer::doSelectOne($c); 
    } 
} 

가이 기능을 캐시하는 것은 의미가 있습니까?

필자의 이해에 따르면 함수에 전달 된 문자열 값은 항상 다른 사용자에 따라 다르기 때문에이 함수는 매번 실행됩니다. 그러나 이전에 메소드에 전달 된 문자열 값과 검색된 레코드에 대한 사용자에게는 다시 실행되지 않습니다. 이 경우에만 기능 캐싱이 작동합니다.

사용자가 약 50,000 명이라면이 방법으로 캐싱을 사용하는 것이 좋습니다.

답변

2

이것은 매우 간단한 쿼리로 해시 열이 인덱싱되지 않아도 빠르지 만 (매우 빠른 경우에도) 결과를 캐시 할 이유가 없습니다.

결과 캐시는 쿼리가 복잡하고 집계 데이터 또는 하위 쿼리가 포함 된 상황에서 자주 사용됩니다. 그렇다하더라도 먼저 쿼리를 작업하여 최적화 할 수 있는지 확인해야합니다.

업데이트 : 당신은 당신이 캐시에 저장하는 것이 아무것도 볼거야 sfCache 클래스 (모든 콘크리트 캐시 구현의 기본을) 확인해보세요

그것이에만 저장됩니다 의미하는 수명이 제한된 시간. 즉, 캐시의 크기가 제한됩니다.

캐시는 다음과 같이 작동합니다

  • 함수는 주어진 키
  • 에 저장된 값이 있는지
  • 당신이
  • 캐시를 요청 함수 이름에서 캐시 키와 매개 변수를 계산 호출되는
  • 예 인 경우 가져오고 반환하십시오.
  • 반환 값
  • 을 캐시에 저장 한 다음 r eturn it

함수의 반환 값을 캐싱 할 가치가 있는지 여부는 항상 성능 측정입니다. 장기 실행, 계산 집약적 인 기능입니까? 성능 병목 현상입니까? 귀하의 답변이 긍정적이라면 캐싱을 활성화하는 것이 좋습니다.

또한 캐싱 기능을 수행 할 때마다 유지 관리해야하는 코드의 양과 복잡성이 증가한다는 점도 기억하십시오.

+0

고마워요! 그러나 이것은 예제 함수와 같습니다. 아마도 제 질문은 분명하지 않습니다. 실수해서 미안해. 제가 정확히 알고 싶은 것은 함수에 인자를 넘기는 경우와 인자가 다를 때마다 함수의 출력이 다른 경우 함수 캐싱이 어떻게 작동하는지입니다. 그러면 캐시는 어떻게 작동합니까? 이런 경우 캐싱을 사용하는 것이 현명한 선택입니까? 제 질문을 다른 StackExchange 사이트로 옮겨야합니까? 프로그래머 또는 codereview? – gentrobot

+0

그런 경우에는 캐시 키에 입력 내용을 포함시켜야합니다. – Maerlyn

+0

예, 할 수 있습니다. 그러나 모든 다른 결과가 나오겠습니까? 예를 들어, 입력 1을 pas하면 'abc'결과가 나타납니다.다음에 입력이 1이 아닌 다른 값이면 함수에 의해 출력이 계산됩니다 (캐싱도 됨). 그러나 입력이 다시 1이면 출력은 함수에 의해 계산되지 않고 캐시 된 결과가 제공됩니다. 이 방법으로 작동합니까? 이러한 경우 함수 캐시가 너무 커지지 않을까요? 그런 캐싱을 사용하도록 설정하는 것이 좋습니다. 이 댓글에 대한 답장을 보내려면 위의 답변을 수정하십시오. 그렇게하면 대답을 받아 들일 수 있습니다 :) – gentrobot