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文本操作类
Nov 25 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
php中的比较运算符详解
Oct 28 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
php实现的双向队列类实例
Sep 24 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
使用PHP实现生成HTML静态页面
Nov 18 PHP
zend framework重定向方法小结
May 28 PHP
Yii框架页面渲染操作实例详解
Jul 19 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中使用Oracle数据库(6)
2006/10/09 PHP
中英文字符串翻转函数
2008/12/09 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
PHP对象实例化单例方法
2017/01/19 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
2019/02/21 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
Python中的匿名函数使用简介
2015/04/27 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
python IDLE添加行号显示教程
2020/04/25 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
国际书籍零售商:Wordery
2017/11/01 全球购物
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
文字自荐书范文
2014/02/10 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
收款委托书
2014/10/14 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python