zoukankan      html  css  js  c++  java
  • 在yii中使用memcache

    yii中可以很方便的使用memcache

    一.配置
    在main.php的components中加入cache配置
    [php] view plaincopy
     
    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的方法也很简单
    [php] view plaincopy
     
    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扩展不进行额外的"小动作"。
    [php] view plaincopy
     
    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)   
    其中:
    keyPrefix:key的前缀,默认用CApplication::getId()方法生成。
    hashKey:对key进行hash操作,默认md5
    serializer:value的序列化方法,默认serialize
    将这些都置空,扩展的行为就同原生Memcache一致了。

    四.更多memcache方法调用
    yii的扩展中,只有memcache的最常用操作,并没有类似原生memcache的decrement和increment等操作。如果想要作用这些方法怎么办呢?可以使用扩展中的getMemCache方法获得原生memcache对像,然后就可以使用原生方法了。
    [php] view plaincopy
     
    1. $mem = Yii::app()->cache->getMemCache();  
    2. $res = $mem->decrement($key);  
    使用原生方法时,最好设置上文(三)中提到的配置,不然同时使用yii的扩展方法和memcache的原生方法会带来麻烦。
  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/4531325.html
Copyright © 2011-2022 走看看