你好,游客 登录 注册 搜索
背景:
阅读新闻

Yii框架分布式缓存的实现方案

[日期:2015-02-22] 来源:Linux社区  作者:jhq0113 [字体: ]

2.跨Web服务器分布式缓存处理方案

跨Web服务器的分布式缓存就得借助于Memcached或Redis了,如下图:

Yii框架分布式缓存的实现方案

浏览器将读/写请求交给反向代理Nginx或者F5硬件,再由Nginx将请求分发给各自的Web服务器,各自Web服务器共享缓存服务器。

上图是利用Cache Server来实现的分布式缓存实时更新,处理流程:

1号读线程开始请求缓存,请求不到,读取数据库,设置缓存,将查询结果返回给浏览器;2号读线程,请求缓存,请求到缓存,将结果返回给浏览器;写线程直接操作数据库,删除缓存,返回浏览器;1号读线程读不到缓存,读取数据库,设置缓存,将查询结果返回给浏览器。

读线程代码:

/**读线程
*@return mixed
*/
public function actionWide()
{
    $products=$this->getCache();
    if(!$products)
    {
      $products=$this->getProducts();
      $this->setCache($products);
      echo "没有获取到缓存,从数据库读取数据。<br/>";
    }
    echo json_encode($products);
}

/**从缓存中读取数据
*@return mixed
*/
private function getCache()
{
    return Yii::app()->cache->get('product');
}

/**从数据库读取数据
*@return mixed
*/
private function getProducts()
{
    $pro=Yii::app()->db;
    $products=$pro->createCommand("select*from{{product}}")->query();
    $products=$products->readAll();
    return $products;
}

/**
*更新缓存
*/
private function setCache($products)
{
    Yii::app()->cache->set('product',$products);
}

写线程代码:

/**
*模拟写操作
*/
public function actionWrite()
{
    $pro=Yii::app()->db;
    $command=$pro->createCommand("INSERTINTO{{product}}(`name`,`color`,`version`)VALUES('依赖','黑色',1)");
    $command->execute();
    $this->delCache('product');
    echo "写成功";
}

/**根据键值删除缓存
*@param$key键值
*/
private function delCache($key)
{
    Yii::app()->cache->delete($key);
}

如果你想用Redis或Memcached做缓存,最好用Linux做缓存服务器,连接Web服务器就不做限制了,但是有一点,如果你想用Redis做缓存,或者Web服务器安装php对Redis的扩展,或者去Yii官网下载Yii对Redis的支持扩展,否则Yii不是不能利用Redis做缓存的,也可以在这里下载,这是我下好的。

RedisCache下载:

 

下载解压放在extensions目录,在主配置文件里做如下修改:

 'components'=>array(
    //设置缓存
    'cache'=>array(
        'class'=>'ext.redis.CRedisCache',
        'servers'=>array(
            array('host'=>'192.168.1.16','port'=>6379,),
        ),
    'keyPrefix'=>'',
    ),
),

最后补充一下,为什么加这个keyPrefix配置,因为,如果你想用telnet通过key获取memcached或者Redis中的缓存value,是获取不到的,因为Yii框架给key会加上默认前缀,如果你在这里配置了,Yii框架就不会再对key进行处理了,这样你就可以通过telnet获取到缓存数据了。

好了,就到这里了。

Yii 的详细介绍请点这里
Yii 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-02/113828.htm

linux
相关资讯       Yii  Yii缓存 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款