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 相关文章推荐
使用 MySQL Date/Time 类型
Mar 26 PHP
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
关于php正则匹配汉字的方法介绍
Apr 25 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
php 强制下载文件实现代码
Oct 28 PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 PHP
PHP加密解密字符串汇总
Apr 26 PHP
PHPMailer发送邮件
Dec 28 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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 syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
JavaScript 变量作用域分析
2011/07/04 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
司机的工作范围及职责
2013/11/13 职场文书
精彩的广告词
2014/03/19 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
银行贷款委托书范本
2014/10/11 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
详解SQL的窗口函数
2022/04/21 Oracle