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 相关文章推荐
php批量删除数据
Jan 18 PHP
PHP中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
Admin generator, filters and I18n
Oct 06 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
php curl post 时出现的问题解决
Jan 30 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
PHP写的简单数字验证码实例
May 23 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
PHP微商城开源代码实例
Mar 27 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
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
修复IE9&safari 的sort方法
2011/10/21 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
javascript动画浅析
2012/08/30 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
幼儿教师个人求职信范文
2013/09/21 职场文书
编辑求职信样本
2013/12/16 职场文书
爱心倡议书范文
2014/05/12 职场文书
护理专业自荐信范文
2015/03/06 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers