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 18 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
php发送邮件的问题详解
Jun 22 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
在laravel框架中使用model层的方法
Oct 08 PHP
基于PHP实现邮箱验证激活过程详解
Oct 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中SimpleXML函数用法分析
2014/11/26 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
js版本A*寻路算法
2006/12/22 Javascript
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
Expandable "Detail" Table Rows
2007/08/29 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
python 如何在测试中使用 Mock
2021/03/01 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
C#面试常见问题
2013/02/25 面试题
C#基础面试题
2016/10/17 面试题
大学生专业个人学习的自我评价
2013/10/26 职场文书
网络宣传方案
2014/03/15 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
整改报告格式
2014/11/06 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python