Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2-can';t使用缓存组件将过期时间为的对象保存到memcached_Php_Memcached_Yii2 - Fatal编程技术网

Php Yii2-can';t使用缓存组件将过期时间为的对象保存到memcached

Php Yii2-can';t使用缓存组件将过期时间为的对象保存到memcached,php,memcached,yii2,Php,Memcached,Yii2,我有一个使用php和Yi2作为RESTAPI后端的应用程序。 我在一台运行64位Windows 8和WAMP 2.5的机器上用memcached的本地实例编写代码,并在运行ubuntu的Amazon EC2实例上进行测试,该实例使用Amazon ElastiCache并运行apache2 我发现,使用内置的Yii2缓存组件不允许我在任何一个安装上设置或添加对象到缓存,但如果我直接使用PHP扩展,它会像一个符咒一样工作 代码示例: $cacheObject = Yii::$app->cach

我有一个使用php和Yi2作为RESTAPI后端的应用程序。
我在一台运行64位Windows 8和WAMP 2.5的机器上用memcached的本地实例编写代码,并在运行ubuntu的Amazon EC2实例上进行测试,该实例使用Amazon ElastiCache并运行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实例——但鉴于这也发生在我的EC2实例上,我怀疑我的安装有问题


你知道为什么这不起作用吗

众所周知,PHP实现了与两个不同库的memcached(服务器)集成:

  • memcache()
  • memcached()
Yi2使用MemCache类中的usemcached属性只公开一个接口

请参阅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);
}

我认为memcache/memcached的php库(请参见phpinfo())和Yii2配置(请参见usemcached属性-默认值为false)之间不匹配。

我已经检查过,没有不匹配。我认为这可能是一个时钟问题,因为Yii2总是将持续时间转换为unix时间,但我不确定,因为我不希望它发生在memcached的本地实例上,因为memcached实例和应用服务器(apache)在同一台机器上,因此应该共享同一个时钟。您可以发布yii主配置吗?也许你错过了什么。