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 相关文章推荐
如何跨站抓取别的站点的页面的补充
Oct 09 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
php如何获取文件的扩展名
Oct 28 PHP
实现PHP框架系列文章(6)mysql数据库方法
Mar 04 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
Yii2中SqlDataProvider用法示例
Sep 22 PHP
php二维码生成以及下载实现
Sep 28 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 PHP
php解析非标准json、非规范json的方式实例
May 10 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缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
Javascript 继承实现例子
2009/08/12 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
python中的函数用法入门教程
2014/09/02 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
django2.0扩展用户字段示例
2019/02/13 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
本科毕业生应聘求职信
2014/07/06 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书