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 中dirname(_file_)讲解
Mar 18 PHP
由php if 想到的些问题
Mar 22 PHP
php 操作调试的方法
Jul 12 PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
Jun 28 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
Laravel Reponse响应客户端示例详解
Sep 03 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新增记录ID值的3种方法
2014/06/24 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
python中nan与inf转为特定数字方法示例
2017/05/11 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
Keras自定义IOU方式
2020/06/10 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
Wiggle中国:英国骑行、跑步、游泳 & 铁三运动装备专卖网店
2016/08/02 全球购物
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
银行实习鉴定
2013/12/13 职场文书
保护环境倡议书500字
2014/05/19 职场文书
质量月口号
2014/06/20 职场文书
五四青年节的活动方案
2014/08/20 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技