Yii의 AR 단일 행 데이터 자동 캐시 메커니즘

8157 단어 yii
관련 YII 클래스:
CActiveRecord
CActiveRecordBehavior
cache
Active Record
Active Record(AR)는 ORM(관계 매핑) 기술이 유행하는 객체입니다.Yii DAO는 거의 모든 데이터베이스와 관련된 작업을 처리할 수 있지만, 일부 기본적인 CRUD에 대해서는 YII가Active Record를 사용하는 것을 추천합니다.
 
CActiveRecord는 하위 클래스에서 덮어쓰여 워크플로우를 사용자 정의할 수 있는 몇 가지 자리 표시자 방법을 제공합니다.
beforeValidate와 afterValidate: 동작이 트리거된 AJAX 기반 검증이 실행되기 전과 이후에 호출된 함수를 폼에서 제출합니다. (validate OnSubmit가true로 설정되었을 때만 사용할 수 있습니다.)
beforeSave와 afterSave: 이 두 개는 AR 인스턴스를 저장하기 전과 후에 호출됩니다.
before Delete와 after Delete: 이 두 개는 AR 실례가 삭제되기 전과 이후에 호출됩니다.
afterConstruct: 이것은 new 조작부호를 사용하여 AR 실례를 만든 후에 호출됩니다.
beforeFind: 이것은 AR 검색기가 검색을 실행하는 데 사용되기 전에 (예:find (),findAll ())) 호출됩니다.1.0.9 릴리즈를 사용할 수 있게 되었습니다.
afterFind: 각 AR 인스턴스가 질의 결과로 작성될 때 호출됩니다.
캐시
캐시는 웹 사이트의 성능을 향상시키는 데 사용되는 간단하면서도 효과적인 방법이다.필요한 경우 상대적으로 정적 데이터를 캐시에 저장하여 데이터를 생성하는 시간을 줄일 수 있습니다.
구현 코드
YiicmsActiveRecord.php는 CActiveRecord를 상속합니다.php
/**

 * Base class for all active records

 * @author biner

 * @since 1.1

 * @package Yiicms.log

 *

 */

abstract class YiicmsActiveRecord extends CActiveRecord

{

    public function behaviors()

    {

        return array(

            // YII AR     

            'YiicmsActiveRecordBehavior'

        );

    }

    /**

    *   model   

    */

    public function getModelClass()

    {

        $modelclass = get_class($this);

        return $modelclass;

    }

    /**

    *            

    */

    public function getCacheKey($pk = '')

    {

        $modelclass = $this->getModelClass();

        $model_pk = $this->getPrimaryKey();

        $pk = $model_pk?$model_pk:$pk;

        $key = 'resource_'.$modelclass.'_'.$pk;

        //var_dump($key);die;

        return $key;

    }

    /**

    *   findByPk  ,        ,       

    *  YiicmsActiveRecordBehavior ,            

    */

    public function findByPk($pk,$condition='',$params=array())

    {

        $key = $this->getCacheKey($pk);

        //Yii::app()->cache->delete($key);

        $resource=Yii::app()->cache->get($key);

        if($resource===false)

        {

            $resource=parent::findByPk($pk,$condition,$params);

            Yii::app()->cache->set($key,$resource);

            //          ,     $value

            //            

            // Yii::app()->cache->set($id,$value);

        }

        return $resource;

    }

}

YiicmsActiveRecordBehavior.php 상속CActiveRecordBehavior 클래스
/**

 * Base class for all active records

 * @author biner

 * @since 1.1

 * @package Yiicms.log

 *

 */

class YiicmsActiveRecordBehavior extends CActiveRecordBehavior

{

    private $_oldattributes = array();

   

    public function beforeSave($event)

    {

        //    

        $key = $this->Owner->getCacheKey();

        Yii::app()->cache->delete($key);

   

        $attributes = $this->Owner->getAttributes();

        $this->setOldAttributes($attributes);

    }

}

Product.php 상속 YiicmsActiveRecord
/**

 *         AR     YiicmsActiveRecord

 *

 */

class Product extends YiicmsActiveRecord

{

    //......

    //.....

}

From:  http://www.yiibase.com/yii/view/172.html

좋은 웹페이지 즐겨찾기