php – Yii中的模式缓存

这里 http://www.yiiframework.com/doc/guide/1.1/en/topics.performance我们可以看到以下信息:

“如果应用程序使用Active Record,我们应该打开模式缓存以节省解析数据库模式的时间.这可以通过将CDbConnection :: schemaCachingDuration属性配置为大于0的值来完成.”

我有一些问题:

1.我们为什么要使用模式缓存?

2.架构缓存如何工作?

3.我在哪里可以看到测试?

如果将Yii设置为记录数据库查询(配置文件的db设置中的’enableParamLogging’=> true),您可以看到Yii经常查询数据库以查找ActiveRecord查询.

例如:假设您有一个名为User的模型,并告诉Yii按主键获取用户,Yii将查询数据库三(!)次.它将执行show columns查询,然后显示create table查询,最后它将查询数据库中的实际数据.前两个查询是如此Yii知道您的用户表的架构.如果从应用程序服务器到数据库服务器的往返时间是100毫秒(如果它确实很慢,你应该对它做一些事情),那么获取模式的那两个查询将为你的应用程序响应时间增加至少200毫秒.它将为填充User模型的每个请求执行此操作.根据应用程序的编写方式,它甚至可以在单个请求中多次执行.

另一方面,如果你告诉Yii使用模式缓存,Yii将检查缓存以查看它是否已经知道你的用户表的模式,如果是,它将使用它而不是命中数据库.检查缓存仍然存在延迟,但希望它小于或等于数据库服务器的延迟.假设你正在使用Redis服务器进行缓存,它的延迟也是100毫秒(也非常长).缓存模式仍然比查询数据库更快,因为Yii只需要一次查询缓存来检索模式,而不是两次访问数据库.

因此,在此示例中,从查询架构的高延迟数据库查询高延迟缓存服务器的切换仍将节省您的时间.实际上,您的缓存应该比数据库具有更低的延迟,因此可以节省更多时间,如果您的应用程序远程复杂,Yii将在每个请求上从多个表加载模式,因此模式缓存可以在请求响应中产生巨大差异时间.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...