Yii2 - 不能使用缓存组件将具有到期持续时间的对象保存到memcached

时间:2015-07-09 09:47:36

标签: php memcached yii2

我有一个使用php和Yii2作为其REST API后端的应用程序 我在运行Windows 8 64bit and WAMP 2.5 with a local instance of memcached的计算机上进行编码,并在Amazon EC2 instance running ubuntu that uses Amazon ElastiCache and running apache2上进行测试。

我发现使用内置的Yii2缓存组件不允许我在任一安装上设置或添加对象到缓存,但是如果我直接使用PHP扩展,它就像魅力一样。

代码示例:

$cacheObject = Yii::$app->cache;

$cacheObject->add('testKey','testValue',10);

if($cacheObject->add('testKey','testValue',10))
{
    return 'Something is wrong with Yii2 cache component!';
}
else
{
    return 'Timed caching with Yii2 works!';
}
// Above code never enters else clause.


$memcachedObject = new Memcached();
$memcachedObject->addServer(CACHE_ENDPOINT,CACHE_PORT);

$memcachedObject->add('testKey2','testValue2',10);

if($memcachedObject->add('testKey2','testValue2',10))
{
    return 'Something is wrong with memcached extension';
}
else
{
    return 'Timed caching with Memcached extension works!';
}
// This code always enters else clause.

我怀疑我必须做些什么来启用Yii2中的定时缓存。

作为参考,我使用了这个问题的答案中的说明来安装和运行我的本地memcached实例 - How to enable memcache in WAMP但看到它也发生在我的EC2实例上我怀疑是否存在问题我的安装。

关于为什么这不起作用的任何想法?

1 个答案:

答案 0 :(得分:0)

如您所知,PHP实现了与2个不同库的memcached(服务器)集成:

Yii2在 MemCache 类中使用 useMemcached 属性只显示一个界面。

请参阅 MemCache 类:

中的代码
protected function addValue($key, $value, $duration)
{
    $expire = $duration > 0 ? $duration + time() : 0;
    return $this->useMemcached ? $this->_cache->add($key, $value, $expire) : $this->_cache->add($key, $value, 0, $expire);
}

我认为你的php-libs的memcache / memcached(参见 phpinfo()你的Yii2配置之间存在不匹配 useMemcached 属性 - 默认为 false )。