在yii中使用memcache

2022-08-03 14:44:56 浏览数 (2)

yii中可以很方便的使用memcache

一.配置

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

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

说明: 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(
  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’ => array( array(‘host’ => ‘127.0.0.1’, ‘port’ => 11211)),
  4. ‘keyPrefix’ => ”,
  5. ‘hashKey’ => false,
  6. ‘serializer’ => false)
  7. 其中: keyPrefix:key的前缀,默认用CApplication::getId()方法生成。 hashKey:对key进行hash操作,默认md5 serializer:value的序列化方法,默认 serialize 将这些都置空,扩展的行为就同原生 Memcache一致了。

0 人点赞