【问题标题】:Query caching not working in Yii framework查询缓存在 Yii 框架中不起作用
【发布时间】:2014-04-16 15:55:34
【问题描述】:

我有一个包含超过 27,000 条记录的表。我想获取下拉列表中的所有数据。为此,我已经实现了缓存,但它似乎无法正常工作,因为它变得非常缓慢并显示空白页面(有时浏览器被挂起)。

以下是我的代码(我使用的是 yiiboilerplate):

组件数组中backend/config/main.php的配置:

   'cache' => array(
        //'class' => 'system.caching.CMemCache',
        'class' => 'system.caching.CDbCache',
        'connectionID' => 'db',
    ),

在查看页面中:

    $dependency = new CDbCacheDependency('SELECT MAX(bank_id) FROM bank');
    $bank = CHtml::listData(Bank::model()->cache(1000, $dependency)->findAll('is_active=1', array('order' => 'name')), 'bank_id', 'concatened');
    echo $form->dropDownListRow($model, 'bank_id', $bank, array(
        'empty' => 'Select'
    ));

我认为 27000 条记录不是大数据,但它仍然变得非常慢,我想在我的整个应用程序中实现缓存。

我的配置正确吗?我哪里出错了?

谢谢

【问题讨论】:

  • 对于浏览器来说这是相当多的数据(想想移动端)。即使您最终在可接受的时间内填充,您认为谁会滚动并选择那个长列表中的某些记录?我认为<select> 完全不在这里。您需要自动完成。
  • 一次查询 27,000 条记录非常费力。想象一下,您正在初始化一个数组并用 27,000 个条目填充它。有时会导致服务器超时。做一个分页机制你的下拉条目会减轻你的负载。
  • @Pentium10 是对的。 This html page 仅包含具有 27000 个相同选项的选择 Pick Me 为 64KB。我曾经有一个类似的选择,其中包含 10,000 条记录,这让我的浏览器不断崩溃。
  • 这与下拉条目无关。它关于 findall 不能使用缓存。因为如果我正常尝试Bank::model()->findall(),那么它也会变得非常慢并显示空白页。而不是 findall 我尝试了 createCommand ,它有点慢,但在下拉列表中显示所有记录。

标签: php caching yii


【解决方案1】:

我认为您在findAll 中的参数不正确。

应该是:

Bank::model()
    ->cache(1000, $dependency)
    ->findAll([
       'select' => 'bank_id',
       'order' => 'name ASC', // if it is in ascending order
       'condition' => 'is_active = 1'
    ]);

我不知道concatened 是什么,所以我忽略了它。但是您始终可以根据自己的条件使用范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多