Yii AR 单行数据-自动缓存机制

本文的目的是通过使用Yii的Cache机制,在对AR MODEL的单条数据做one::model()->findByPk()的时候,优先读取缓存数据,如果不存在再去链接DB做数据读取。

AR自动缓存

相关的YII类:

  • CActiveRecord
  • CActiveRecordBehavior
  • cache

Active Record

Active Record (AR) 是一个流行的 对象-关系映射 (ORM) 技术。Yii DAO 可以处理几乎任何数据库相关的任务,不过对于一些基本的CRUD,YII推荐使用Active Record。

CActiveRecord 提供了几个占位符方法,它们可以在子类中被覆盖以自定义其工作流。

  • beforeValidate
  • beforeSave 和 afterSave: 这两个将在保存 AR 实例之前和之后被调用。
  • beforeDelete 和 afterDelete: 这两个将在一个 AR 实例被删除之前和之后被调用。
  • afterConstruct: 这个将在每个使用 new 操作符创建 AR 实例后被调用。
  • beforeFind: 这个将在一个 AR 查找器被用于执行查询(例如 find()findAll())之前被调用。 1.0.9 版本开始可用。
  • afterFind: 这个将在每个 AR 实例作为一个查询结果创建时被调用。

缓存

缓存是用于提升网站性能的一种即简单又有效的途径。通过存储相对静态的数据至缓存以备所需,我们可以省去生成这些数据的时间。

实现代码

YiicmsActiveRecord.php 继承 CActiveRecord.php

YiicmsActiveRecordBehavior.php 继承CActiveRecordBehavior类

Product.php 继承 YiicmsActiveRecord

《Yii AR 单行数据-自动缓存机制》有2个想法

  1. 据我所知,Yii这类AR的实现中,如果需要缓存AR,则是实现了wakeup和sleep两个魔法方法的,用以在序列化前后销毁和重新建立数据库连接,如果AR用到了关联,且在程序中的视图中用到关联,那么还是会自动查询数据库(延迟加载),这个缓存的作用似乎不大,我更倾向于使用页面片段缓存。

    1. 其实一开始并不是为了缓存而缓存,是为了解决每次后台操作都必须的日志log。自动记录log
      为简单的crud操作做log,并且记录两次操作的数据集。
      当然,在更新比较频繁的大型系统中,这非常影响效率。

      前台页面还是需要用片段缓存,乃至页面缓存。

发表评论

电子邮件地址不会被公开。 必填项已用*标注