최근 yii 블로그 데모의 수정 된 버전 인 블로그를 php yii 웹 사이트에 추가했습니다. 내 블로그는 유감스럽게도 약 20 개의 데이터베이스 호출을 사용하여 게시를 표시하는 활성 레코드를 사용합니다. Memcache를 사용하여 속도를 높이고 싶습니다. DB 호출의 미친 숫자를 없애기 위해 메모리에서 할 수있는만큼 많은 내용을 캐시하고 싶습니다. 스키마 캐싱을 이미 사용하도록 설정 했으므로 12 또는 13과 같이 더 많은 전화가 끊어 지지만 여전히 너무 많습니다.memcache on yii 블로그 아키텍처
내 블로그를로드하는 동안 부하가 많이 걸리면 내 CPU가 제한 요소라는 것을 알았습니다. 나는 아직도 많은 양의 숫양을 가지고있다. 그래서 나는 그 여분의 램을 사용하는 것이 나의 CPU에 걸리는 부하를 줄이기를 바라고있다. 그것이 memcache가 들어오는 곳입니다. 문제는 그것을 구성하는 방법입니다.
코멘트와 태그가있는 단일 게시물을 캐싱하는 방법을 알아 냈습니다. 그다지 어렵지 않습니다. 내가 고민하는 것은 인덱스 페이지를 캐시하는 방법이다. 5 개 게시물이 것 1 페이지, 2 페이지 내가 만들고있어 등, 5 게시물있을 것 같은 데이터베이스 전화 :
$criteria=new CDbCriteria(array(
'condition'=>'status='.Post::STATUS_PUBLISHED,
'order'=>'create_time DESC',
'with'=>'commentCount',
));
if(!is_null($tag))
$criteria->addSearchCondition('tags', $tag);
$dataProvider=new ActiveDataProvider('Post', array(
'pagination'=>array(
'pageVar'=>'page',
'pageSize'=>5,
),
'criteria'=>$criteria,
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
나는 원래 그냥 쿼리 문자열과 결과 $의 dataProvider의 캐시 할 수 생각 열쇠. 내가 가질 수있는 무엇인가 :
echo http_build_query($criteria->toArray());
나는 그 열쇠에 페이지 번호를 붙일 것이다. 그러나 그것은 쉽다. 그러나 이렇게하면 모든 페이지와 모든 태그에 대해 별도의 dataProvider를 캐시해야하므로 태그를 업데이트하거나 새 게시물을 추가하는 경우 업데이트 할 수있는 악몽이됩니다.
나는 훌륭한 사람들 중 한 사람이 나에게 몇 가지 제안을 할 수 있다고 확신합니다. 나는 이것을 설계하는 방법을 놓치고있다.
전체 페이지를 캐시하지 않는 이유는 무엇입니까? – Ansari
그게 내가 말하는거야. 만약 내가 각 페이지를 잡으려고했다면, 새로운 게시물을 만들려면 캐시의 모든 인덱스 페이지와 동일한 태그가 붙은 게시물과 관련된 페이지를 무효화해야합니다. – Erreth
나는 캐시를 무효로하는 것이 그렇게 큰 문제라고 생각하지 않습니다. 이제 20 개의 DB 호출과 많은 PHP 코드 실행 * pageload *가 있으면 새 게시물이나 새 태그가있을 때마다이 코드를 갖게됩니다. 당신은 많이 얻고 있습니다. – Ansari