I think current Yii AR implementation makes this troublesome. Make a CActiveRecordBehavior and implement beforeFind($event). In there you can access criteria for this find call (and maybe hash it for use as a cache key). Then if cache doesn’t contain your data (Yii::app()->cache->get($yourFindQuery) === false), you should call query and populateRecords and store it in cache. But if the key is found in cache, you should just return the existing data (probably an array of ARs) and prevent further AR behaviour, that is to continue with finding data. I haven’t figured how to do this though… I can store/find data in cache but AR will still fetch its data from DB the old way. There should be some way to prevent the execution of AR’s find method after data is found in cache… Any ideas are welcome!