zoukankan      html  css  js  c++  java
  • 在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一致了。

    四.更多memcache方法调用
    yii的扩展中,只有memcache的最常用操作,并没有类似原生memcache的decrement和increment等操作。如果想要作用这些方法怎么办呢?可以使用扩展中的getMemCache方法获得原生memcache对像,然后就可以使用原生方法了。

    1. $mem = Yii::app()->cache->getMemCache();  
    2. $res = $mem->decrement($key);  

    使用原生方法时,最好设置上文(三)中提到的配置,不然同时使用yii的扩展方法和memcache的原生方法会带来麻烦。

  • 相关阅读:
    MySQL锁之三:MySQL的共享锁与排它锁编码演示
    服务链路追踪(Spring Cloud Sleuth)
    服务网关zuul之四:zuul网关配置
    hdu 1505 City Game (hdu1506加强版)
    PHP设计模式——訪问者模式
    极客互联网电视不是噱头,用户体验成创维G7200核心竞争力
    深入理解JavaScript系列(23):JavaScript与DOM(上)——也适用于新手
    使用php分页类实现简单分类
    管理之路(四)
    poj 2485 Highways (最小生成树)
  • 原文地址:https://www.cnblogs.com/klj123wan/p/2869243.html
Copyright © 2011-2022 走看看