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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
php学习之function的用法
Jul 14 PHP
基于simple_html_dom的使用小结
Jul 01 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
May 20 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
iOS10推送通知开发教程
2016/09/19 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
Javascript中的相等与不等运算
2010/04/25 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
JS判断数组那点事
2017/10/10 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
Python脚本实现自动发带图的微博
2016/04/27 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
Python如何实现转换URL详解
2019/07/02 Python
python移位运算的实现
2019/07/15 Python
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
即将毕业大学生自荐信
2014/01/24 职场文书
运动会跳远广播稿
2014/02/04 职场文书
低碳生活倡议书
2014/04/14 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
精神文明建设标语
2014/06/16 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
教师培训简讯
2015/07/20 职场文书