php yii memcached,Yii框架如何正确使用MemCache缓存

2d0e0cdd361eab144e2a39baa3307cc0.png

具体操作如下所示:

(图文教程推荐:yii)

一、配置memcache server 服务器

1、下载memcached软件包,下载地址:http://pan.baidu.com/s/1boAnghp

解压,把memcached.exe放到随意一个地方,比如:d:/memcached/下(我解压到了我的wampserver的bin目录下与php目录同级)。

2、windows+R快捷键输入cmd, 在命令行中输入一下代码,切换到memcache.exe的目录下:

af220f171b6fc343d274816d6984afec.png

3、输入如下代码安装memcache.exe: memcached.exe -d install

c3e76bae6c25f6369a2041ece42a2737.png

4、输入memcached.exe -d start启动

83ddefe5b6a37ba1e4a84743b1376919.png

配置成功//memcache常用的函数:

Memcache::add //添加一个值,如果已经存在,则返回false

Memcache::addServer // 添加一个可供使用的服务器地址

Memcache::close //关闭一个Memcache对象

Memcache::connect // 创建一个Memcache对象

memcache_debug // 控制调试功能

Memcache::decrement // 对保存的某个key中的值进行减法操作

Memcache::delete //删除一个key值

Memcache::flush // 清除所有缓存的数据

Memcache::get //获取一个key值

Memcache::getExtendedStats //获取进程池中所有进程的运行系统统计

Memcache::getServerStatus// 获取运行服务器的参数

Memcache::getStats //返回服务器的一些运行统计信息

Memcache::getVersion //返回运行的Memcache的版本信息

Memcache::increment //对保存的某个key中的值进行加法操作

Memcache::pconnect // 创建一个Memcache的持久连接对象

Memcache::replace //对一个已有的key进行覆写操作

Memcache::set //添加一个值,如果已经存在,则覆写

Memcache::setCompressThreshold //对大于某一大小的数据进行压缩

Memcache::setServerParams //在运行时修改服务器的参数

二、安装php_memcache.dll扩展

1、首先下载符合你的php版本的php_memcache.dll扩展

地址:http://pan.baidu.com/s/1skJnZIl

2、复制张贴在你的php/ext文件夹里

3、在php.ini里面添加如下代码,导入扩展:extension=php_memcache.dll

三、yii里面的配置

1.如果你用的是基础框架:打开config/web.php

如果你用的是高级框架:打开config/main.php

添加如下代码:'cache' => [

'class' => 'yii\caching\MemCache',

'servers' => [

[

'host' => 'localhost',

'port' => 11211,

'weight' => 100,

],

[

'host' => 'localhost',

'port' => 11211,

'weight' => 50,

],

],

],

现在就可以在你的控制器的action方法中使用如下代码了://缓存MemCache

$key='key';

$value='this is the value';

Yii::$app->cache->set($key,$value);

echo "lixian";

echo Yii::$app->cache->get($key);

exit();

 
 

但是当你使用过期时间时即:Yii::$app->cache->set($key,$value,6);//过期时间为6s

echo "lixian";

echo Yii::$app->cache->get($key);

exit();

就输出不了了,这是该框架自身的一个bug,解决办法如下:

在yii2使用memcache前根据文档配置好相应的参数,在使用memcache(非memcached)过程中会发现

Yii::$app->cache->set('key','value');

当这句话没有设置有效时间为多少秒时,可以正常获取到缓存中键为key的值,但表示此key不过期。

当设置了有效时间时,

Yii::$app->cache->set('key','value',60);

比如60秒,就会出现取不到key对应的value值,网上和论坛里搜了搜,没有找到解决办法,也有很多phper遇到这类似的问题。所以特意去看了看底层代码,引用的memcache类为Yii2自带的yii\caching\MemCache,

Yii::$app->cache->set('key','value')

这句代码会自动调用memcache类下的setValue方法来设置缓存,所以问题也许就出现在这儿了。

后面经过测试,发现这个方法最后一句

return $this->useMemcached ? $this->_cache->set($key, $value, $expire) : $this->_cache->set($key, $value, 0, $expire)

的问题,将这句代码改为

return $this->useMemcached ? $this->_cache->set($key, $value, $expire) : $this->_cache->set($key, $value, 0, $duration)

后,再测试发现问题已经解决。

原因则是这句return代码里使用memcache时调用的

$this->_cache->set($key, $value, 0, $expire)

,相当于

$mem = new Memcache();$mem->set($key,$value,0,$expire);

这里最关键的一点是:memcache要设置的时间的含义是有效时间为多少秒,memcached要设置的时间的含义是在哪一秒到期(等效于time()+$duration),所以发现问题所在之后将原来代码里的第二个$expire改成$duration问题就解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值