2010-08-15 3 views
0

그래서 PHP CodeIgniter webapp가 있고 캐싱을 통합할지 여부를 결정하려고합니다.캐싱이이 시나리오에 적합합니까?

나는 캐싱을 완전히 이해하지 못한다는 것을 기꺼이 인정할 것이므로이 부분에 나와 함께하시기 바랍니다.

  • 따라서 첫 번째 사용자는 사용자 제출 콘텐츠의 페이지를로드합니다. '느리게'로드하려면 0.8 초 (처리)가 걸립니다. 다음 사용자는 동일한 페이지를로드하고 캐시에서 '빨리'로드하는 데 0.1 초가 걸립니다.

  • 세 번째 사용자가 실행 시간을 0.1 초 걸립니다. 이 사용자는 페이지에 댓글을 달기로 결정합니다. 캐시가이 상황에서 어떻게해야합니까

을 만료되기 전에 최대 2 분 후에하지만 세 번째 사용자의 의견을 참조하지 않습니다

  • 네 번째 사용자로드를, 또 다른 50 분이 때문에 왼쪽? 이와 같은 페이지에 캐싱을 통합 할 가치가 있습니까?

    캐싱을 사용하려는 이유는 테스트를 수행했기 때문입니다. 캐싱이 없으면 내 페이지 평균 실행 시간이 0.7864 초입니다. 캐싱의 경우 평균 0.0138 초가 걸렸습니다. 5599 %의 향상입니다!

    나는 여전히 밀리 세컨드의 문제의 이해하지만 그렇다고하더라도 ...

  • +0

    일부는 얻을 수 있지만 일부는 손실됩니다.이 규칙은 전체 캐싱과 캐싱 중간에있는 데이터에 항상 적용됩니다. 캐시 타임 아웃 이전에 지속 시간을 조정하면 필요한 작업이됩니다. 따라서 모든 데이터가 표시되는 방식에 대한 사용자 인식의 문제입니다. 어떤 경우에는 60 분이 받아 들여지지 않을 수도 있습니다. 반면에 1 개월 동안 일부 데이터를 캐싱해도 아무 것도 변경되지 않습니다. – stillstanding

    +0

    생각 : 사용자 의견 제출이나 유사한 동작을 통해 프로그래밍 방식으로 캐시를 삭제할 수 없습니까? 어떻게 그걸 할 수 있니? 편집 : Timdev 뭔가 비슷한 말한 것을 참조하십시오 ... – Jack

    +0

    네, 캐시를 새로 고치려면 캐시 항목을 만료 – stillstanding

    답변

    6

    당신은 더 나은 캐시를 원한다.

    일반적으로 캐시 시간 제한에 도달하지 않아야합니다. 대신 일부 사용자 중심 작업은 캐시를 무효화합니다. 이 같은 시나리오가있는 경우

    그래서 :

    1. 조는 처음으로 (적)의 페이지를로드합니다. 캐시가 없으므로 시간이 걸리지 만 그 결과는 캐시됩니다.
    2. Mary는 페이지를로드하고 캐시에서 빠르게로드합니다.
    3. Mary가 의견을 추가합니다. 주석이 데이터베이스에 추가되고 소프트웨어가 캐시를 무효화합니다.
    4. Pete가 페이지를로드하고 캐시가 유효하지 않으므로 페이지를 렌더링하는 데 1 초가 걸리고 결과가 캐시됩니다 (유효한 캐시 항목으로)
    5. 샘이 나타나면 페이지가 빠르게로드됩니다.
    6. 제니가 등장합니다. 페이지가 빠르게로드됩니다.

    저는 CodeIgniter 사람이 아니므로, 그 프레임 워크가 당신을 위해 무엇을 할 지 확신하지 못합니다. 그러나 위의 사항은 일반적으로 일어날 일입니다. 캐시 무효화가 필요한 데이터가 작성되면 애플리케이션에 캐시 항목을 무효화 할 수있는 충분한 스마트가 있어야합니다.

    +0

    감사합니다. @timdev, 이건 정말 도움이되었습니다. 따라서 CodeIgniter의 캐시 시스템은 캐시 무효화 방법을 포함하지 않습니다. 그러나 일부 사용자는 위키에서 자신 만의 훅을 만들었습니다 : http://codeigniter.com/wiki/Clear_Page_Cache/ – Jack

    +1

    실제로. 나는 내 대답을 업데이트하려고했다. 페이지 수준 캐싱은 종종별로 도움이되지 않습니다. 하위 수준의 캐싱을 살펴볼 수 있습니다. 예를 들어, mySQL의 쿼리 캐시는 설정하는 것이 매우 쉽고 어떤 경우에는 매우 유용합니다. 또한 모델 내에 자체 캐시 논리를 작성할 수 있습니다. 당신은 Zend_Cache를 볼 수 있습니다. Zend_Cache는 CI와 잘 어울리며 훌륭합니다. – timdev

    0

    CI는 페이지 수준 캐싱만을 제공하지만 무효화하지 않고이 문제를 다소 다르게 처리했습니다.이 문제를 처리하는 가장 간단한 방법은 캐싱에서 무거운 모든 내용을로드하는 것이고, 캐싱 할 수없는 Ajax를 통해로드 된 주석은 호출하는 것입니다.

    또는 이전에 지적한 것과 같이이를 해결하는 맞춤 플러그인을 살펴볼 수도 있습니다.

    캐시를 제어하려는 단위가 모두 결정됩니다. 블로그와 같은 간단한 일을 위해 외부 아약스 호출을 통해 주석을로드하는 것이 좋습니다 (사용자가 명시 적으로 주석을 요청할 때와 같이).

    1

    대신 CI의 query caching을 사용해보세요. 페이지는 계속 렌더링 될 때마다 렌더링되지만 DB 결과는 캐싱됩니다 ... 또한 원시 CI 기능 (즉 타사 라이브러리 없음)을 사용하여 삭제할 수 있습니다.

    관련 문제