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 中文乱码解决办法总结分析
Jul 30 PHP
php microtime获取浮点的时间戳
Feb 21 PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 PHP
php+mysql查询优化简单实例
Jan 13 PHP
Thinkphp调用Image类生成缩略图的方法
Mar 07 PHP
标准版Eclipse搭建PHP环境的详细步骤
Nov 18 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 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自定义函数获取URL中一级域名的方法
2016/08/23 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
js获取form的方法
2015/05/06 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
浅谈react性能优化的方法
2018/09/05 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
python 实现矩阵按对角线打印
2019/11/29 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Python网页解析器使用实例详解
2020/05/30 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
教师研修随笔感言
2014/01/23 职场文书
总经理助理工作职责
2014/02/06 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
开场白怎么写
2015/06/01 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技