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设计模式 Bridge (桥接模式)
Jun 26 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
php实现的数组转xml案例分析
Sep 28 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验证码类代码分享(已封装成类)
2011/07/17 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
js树形控件脚本代码
2008/07/24 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
基于python plotly交互式图表大全
2019/12/07 Python
python简单的三元一次方程求解实例
2020/04/02 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
医学生自我鉴定范文
2014/03/26 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
个人工作表现评价材料
2014/09/21 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
2014年财政工作总结
2014/12/10 职场文书
检讨书格式范文
2015/05/07 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
小学远程教育工作总结
2015/08/13 职场文书
九年级化学教学反思
2016/02/22 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS