使用Cache来缓存数据,如何只存有效的数据而不存整个Model实例

不知道大家都使用Yii::app()->cache吗?

我目前在尝试用它来缓存数据,但是我缓存的是整个ActiveRecord对象的实例,一个就7KB。

在内存吃紧的情况下感觉比较浪费,另外由于实例要被序列化才能缓存起来,读取缓存的时候又要反序列化,这么大的实例序列化也比较耗费性能。

请问有什么办法只缓存那些有效的数据(就是数据库内的数据)?


我自己也做了一些尝试,比如说只缓存实例的 attributes,但是当我再New一个实例并赋值的时候,说属性不安全。

所以可能需要去修改验证规则(rules),感觉不算是一种好办法。

请问大家有没有什么好的想法?

顶上

使用AR编写后台的程序是比较方便,但个人认为如果需要考虑效率问题的话不要在对外的程序中使用,最好自己写一个类直接使用pdo来进行数据查询,数据的获取、和缓冲都通过这个类来完成

确实,我本来也是这样想的。

但是,实际上前端的应用很多查询也并不复杂,经常只是一句select。即便是复杂一些的查询,也是可以在AR的基础之上去实现。用AR,本身除两句SQL(“SHOW CREATE TABLE xxx”和“DESC xxx”,而且这两句SQL还可以缓存的)以外,并不会有什么特别的负面效果。

不太明白你的问题,这样的话你上面写到的使用attributes属性应该就行了,为什么还需要"再New一个实例并赋值"呢?