在yii中使用memcache

yii中可以很方便的使用memcache

一.配置

在main.php的components中加入cache配置

  1. array(  
  2.     ‘components’=>array(  
  3.   
  4.         ‘cache’=>array(  
  5.             ‘class‘=>’CMemCache’,  
  6.             ‘servers’=>array(  
  7.                 array(  
  8.                     ‘host’=>’server1’,  
  9.                     ‘port’=>11211,  
  10.                     ‘weight’=>60,  
  11.                 ),  
  12.                 array(  
  13.                     ‘host’=>’server2’,  
  14.                     ‘port’=>11211,  
  15.                     ‘weight’=>40,  
  16.                 ),  
  17.             ),  
  18.         ),  
  19.     ),  
  20. )  

说明:
1)class指明所有缓存类, CMemCache即为memcache
2) 当要使用多个cache轮询时,可以给每个cache配权重(weight)。如果只有一个cache,不加这个配置就可以了。

二.使用 调用memcache的方法也很简单

  1. $key = ‘people’;   
  2. $value = json_encode(array(‘name’=>’ball’, ‘age’=>’male’));   
  3. $expire = 10;   
  4. yii::app()->cache->set($key$value$expire);   
  5. Yii::app()->cache->get($key);   
  6. Yii::app()->cache->delete($key);  

更多api请参阅yii手册CMemCache部分。

三.问题

当你统一使用yii的扩展对memcache进行存取时,不会有什么问题。但现实中会有这么一种情况:你在使用yii开发后台,但前台的同学并未用yii,而是使用了原生的 memcache api对数据进行操作。这时会遇到一些问题。
如上文二中的例子,你会发现,如果使用原生的 memcache api, Memcache::get,用people作key是取不到值的!
原因是,yii的set对key和value都做了处理。默认情况下,对key加前缀并做md5变换,对value进行serialize()。这就难怪使用 Memcache::get(‘people’)取不到值了。

解决:
简单的方法,可以通过配置,让yii的 memcache扩展不进行额外的”小动作”。

  1. ‘cache’ => array(      
  2.     ‘class‘ => ‘system.caching.CMemCache’,   
  3.     ‘servers’ => arrayarray(‘host’ => ‘127.0.0.1’, ‘port’ => 11211)),  
  4.     ‘keyPrefix’ => ,   
  5.     ‘hashKey’ => false,   
  6.     ‘serializer’ => false)  

其中:
keyPrefix:key的前缀,默认用CApplication::getId()方法生成。
hashKey:对key进行hash操作,默认md5
serializer:value的序列化方法,默认 serialize
将这些都置空,扩展的行为就同原生 Memcache一致了。

作者:PHP学习网,本文 在yii中使用memcache 版权归作者,免费文章欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
编辑精选
yii常用标签 2097 浏览 2015-04-14
Yii –Command 任务处理 2273 浏览 2016-08-17
什么是MVC? 1574 浏览 2016-03-30
yii 标签用法 1667 浏览 2016-01-21
YII模板(前台显示)详细分析 2115 浏览 2015-05-27

发表评论