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


Posted in PHP onAugust 02, 2017

本文实例讲述了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框架的PHP程序设计有所帮助。

PHP 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
php5新改动之短标记启用方法
Sep 11 PHP
php下实现在指定目录搜索指定类型文件的函数
Oct 03 PHP
PHP nl2br函数 将换行字符转成 <br>
Aug 21 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
php操作mysql数据库的基本类代码
Feb 25 PHP
Smarty局部缓存的几种方法简介
Jun 17 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 #PHP
php7安装mongoDB扩展的方法分析
Aug 02 #PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 #PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 #PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 #PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 #PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 #PHP
You might like
PHP基础学习小结
2011/04/17 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
Array对象方法参考
2006/10/03 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
vue中使用input[type="file"]实现文件上传功能
2018/09/10 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
python模拟鼠标拖动操作的方法
2015/03/11 Python
在Python中编写数据库模块的教程
2015/04/29 Python
Python生成随机密码的方法
2017/06/16 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
《识字五》教学反思
2014/03/01 职场文书
初中教师业务学习材料
2014/05/12 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
MYSQL 运算符总结
2021/11/11 MySQL