YII框架中使用memcache的方法详解

2018-09-07 11:53

阅读:543

  本文实例讲述了YII框架中使用memcache的方法。分享给大家供大家参考,具体如下:

  yii中可以很方便的使用memcache

  一.配置

  在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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

  希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。


评论


亲,登录后才可以留言!