代码之家  ›  专栏  ›  技术社区  ›  Jeni Vasileva

带dataProvider的Yii2 memcache

  •  1
  • Jeni Vasileva  · 技术社区  · 8 年前

    更新数据库时,使用dataProvider构造和更新我的键/值的正确方法是什么?首先,我从数据库中查找所有新闻。我应该如何添加或更新密钥/值对的值?我一直都是这样,但从来没有用疑问来抓住障碍。红色有很多材料,但没有找到正确的方法。

    $mem = new \Memcached();
    $mem->addServer("localhost", 11211);
    $result = $mem->get('categoriesProvider');
    
    if(!$result){
        $whereString = " active = 1 ";
        $categoriesProvider = new ActiveDataProvider([
             'query' => News::find()->where($whereString),
             'pagination' => [
             'pageSize' => 6,
             'route' => Yii::$app->getRequest()->getQueryParam('first_step'),
                    ],
             ]);
     $mem->set("categoriesProvider", $categoriesProvider);
     }
     $result = $mem->get("categoriesProvider");
    

    以下是我的观点:

    echo ListView::widget([
         'dataProvider' => $result,
         'itemView' => '_blogCategories',
         'layout' => '{items}<ulclass="pagination theme-colored">{pager}</ul>',
         'pager' => [
         'maxButtonCount' => 3,
         'options' => ['class' => 'pagination flRight'],
          ],
    

    ]);

    1 回复  |  直到 8 年前
        1
  •  4
  •   nicola.p    8 年前

    作为memcached和yii2的用户,我可以建议您将缓存放在数据和提供者之间,最简单的方法是查询所需的数据,然后以最轻的形式缓存结果(作为项目本身的数组),然后使用它显示数据或传递给可以显示数据的提供者。

    Memcached的YII2接口允许您利用新方法getOrSet(),在该方法中,您可以使用回调来生成要缓存的数据(如果数据还不存在),从而减轻您自己创建此类流的负担。

    一般来说,将复杂对象的实例存储在缓存中并不像YII2中那样是一个好主意。

    推荐文章