大家是怎么缓存通过AR获得的数据库结果的?
我测试了一下,缓存全部AR结构和仅缓存AR的 attributes 所用的内存比例大概是3:5,感觉挺浪费的
假如我只存 attributes,每次取回来之后通过 populateRecord 方法初始化AR的属性,这样做会有什么问题吗?
大家是怎么缓存通过AR获得的数据库结果的?
我测试了一下,缓存全部AR结构和仅缓存AR的 attributes 所用的内存比例大概是3:5,感觉挺浪费的
假如我只存 attributes,每次取回来之后通过 populateRecord 方法初始化AR的属性,这样做会有什么问题吗?
AR貌似不缓存啊,缓存的都是数据啊,用Redis和memchace即可。还有一些NoSQL的AR,作为官方扩展加进来的,你也可以考虑存为NoSQL。
最后还是按原来的想法做了,就是通过 getAttributes 方法取出一个AR对象的属性缓存起来,下次从缓存里取出来之后再通过AR的 populateRecord 和 populateRecords 方法重新生成一个AR对象,还没发现有什么问题
AR结构会缓存。还是只存attributes好一点,只存属性的话倒像是2的toArray方法。
早先曾经遇到过这样的问题:
在model中使用了某个widget(CHtmlPurifier,早年被网上流传的小技巧给欺骗了),然后直接在后台缓存了。
然后前台取出并恢复,结果出错了。错误原因是widget会有一个owner,记录着缓存前的controller,当前台还原的时候把后台的controller作为owner恢复了,但是前台并不能访问那个controller。
你这不就典型体现了时空权衡问题 省时间就浪费空间 省空间就浪费时间
所以前端小部件最好不要缓存是么?