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代码包装修正版
Mar 15 PHP
php学习笔记之 函数声明
Jun 09 PHP
30 个很棒的PHP开源CMS内容管理系统小结
Oct 14 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
php画图实例
Nov 05 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
PHP多进程简单实例小结
Nov 09 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
PHP实时显示输出
2008/10/02 PHP
PHP clearstatcache()函数详解
2010/03/02 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
Python yield使用方法示例
2013/12/04 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
python中def是做什么的
2020/06/10 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
django使用channels实现通信的示例
2020/10/19 Python
Django admin组件的使用
2020/10/24 Python
python opencv肤色检测的实现示例
2020/12/21 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
Java工程师面试集锦之Spring框架
2013/06/16 面试题
单位车辆管理制度
2015/08/05 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫