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递归创建目录的方法
Feb 02 PHP
php导入模块文件分享
Mar 17 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
php设计模式之单例模式代码
Jun 11 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
php发送http请求的常用方法分析
Nov 08 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
PHP实现生成数据字典功能示例
May 24 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
tp5递归 无限级分类详解
Oct 18 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
javascript new一个对象的实质
2010/01/07 Javascript
js 异步处理进度条
2010/04/01 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
python实用代码片段收集贴
2015/06/03 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
幼儿园大班教学反思
2014/02/10 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
小学生春游活动方案
2014/08/20 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
检讨书怎么写?
2019/06/21 职场文书