新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章给大家介绍如何在YII框架中使用memcache,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
创新互联专注于企业成都营销网站建设、网站重做改版、黎城网站定制设计、自适应品牌网站建设、H5建站、购物商城网站建设、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为黎城等各大城市提供网站开发制作服务。一.配置
在main.php的components中加入cache配置
array( 'components'=>array( 'cache'=>array( 'class'=>'CMemCache', 'servers'=>array( array( 'host'=>'server1', 'port'=>11211, 'weight'=>60, ), array( 'host'=>'server2', 'port'=>11211, 'weight'=>40, ), ), ), ), )
说明:
1)class指明所有缓存类,CMemCache即为memcache
2) 当要使用多个cache轮询时,可以给每个cache配权重(weight)。如果只有一个cache,不加这个配置就可以了。
二.使用
调用memcache的方法也很简单
$key = 'people'; $value = json_encode(array('name'=>'ball', 'age'=>'male')); $expire = 10; yii::app()->cache->set($key, $value, $expire); Yii::app()->cache->get($key); 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扩展不进行额外的"小动作"。
'cache' => array( 'class' => 'system.caching.CMemCache', 'servers' => array( array('host' => '127.0.0.1', 'port' => 11211)), 'keyPrefix' => '', 'hashKey' => false, 'serializer' => false)
其中:
keyPrefix:key的前缀,默认用CApplication::getId()方法生成。
hashKey:对key进行hash操作,默认md5
serializer:value的序列化方法,默认serialize
将这些都置空,扩展的行为就同原生Memcache一致了。
四.更多memcache方法调用
yii的扩展中,只有memcache的最常用操作,并没有类似原生memcache的decrement和increment等操作。如果想要作用这些方法怎么办呢?可以使用扩展中的getMemCache方法获得原生memcache对像,然后就可以使用原生方法了。
$mem = Yii::app()->cache->getMemCache(); $res = $mem->decrement($key);
使用原生方法时,好设置上文(三)中提到的配置,不然同时使用yii的扩展方法和memcache的原生方法会带来麻烦。
关于如何在YII框架中使用memcache就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。