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+oracle 分页类
Oct 09 PHP
基于mysql的bbs设计(三)
Oct 09 PHP
PHP与MySQL开发中页面出现乱码的一种解决方法
Jul 29 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
跟我学Laravel之请求与输入
Oct 15 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
php二维码生成
Oct 19 PHP
解读PHP中上传文件的处理问题
May 29 PHP
值得分享的php+ajax实时聊天室
Jul 20 PHP
php分页查询的简单实现代码
Mar 14 PHP
yii2安装详细流程
May 23 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
paypal即时到账php实现代码
2010/11/28 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php微信开发自定义菜单
2016/08/27 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
企划经理的岗位职责
2013/11/17 职场文书
给市场的环保建议书
2014/05/14 职场文书
博士生求职信
2014/07/06 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS
最新最全的手机号验证正则表达式
2022/02/24 Javascript
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技