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 相关文章推荐
xml+php动态载入与分页
Oct 09 PHP
PHP编程之高级技巧——利用Mysql函数
Oct 09 PHP
php 高效率写法 推荐
Feb 21 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
Apr 14 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
php中Ctype函数用法详解
Dec 09 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 24 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 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远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
php实现mysql封装类示例
2014/05/07 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
php自定义hash函数实例
2015/05/05 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PHP 实现重载
2021/03/09 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
jquery实现表格本地排序的方法
2015/03/11 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
使用js获取伪元素的content实例
2017/10/24 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
详解Python中heapq模块的用法
2016/06/28 Python
Django中的Model操作表的实现
2018/07/24 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
韩国11街:11STREET
2018/03/27 全球购物
我的网上商城创业计划书
2013/12/26 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
教师演讲稿范文
2014/01/08 职场文书
怀念母亲教学反思
2014/04/28 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
干部年终考核评语
2015/01/04 职场文书