我正在尝试使用console命令将数据添加到APC缓存中,但到目前为止还没有成功。
当我将其作为标准操作(控制器/操作)运行时,此代码非常有效:
public function actionUpdateExchangeRate()
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://openexchangerates.org/api/latest.json?app_id=xxxxxxx',
CURLOPT_USERAGENT => 'Exchange Rates'
));
$json = curl_exec($curl);
curl_close($curl);
$rates = json_decode($json);
Yii::$app->cache->set('rates', $rates->rates);
}
我使用相同的代码创建了一个命令,当我尝试设置缓存时,什么也没发生。
var_dump('<pre>', Yii::$app->cache->set('rates', $rates->rates), '</pre>');die;
在以控制器/操作运行时转储 true ,从命令运行时转发 false 。
在 console.php 中,我将此配置添加到组件中(在 web.php 中相同):
'cache' => [
'class' => 'yii\caching\ApcCache',
'keyPrefix' => 'test',
'useApcu' => true
],
PHP版本是:
PHP 7.2.4-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Apr 5 2018 08:53:57) ( NTS )
知道我在这里做错了吗?
答案 0 :(得分:1)
确保您已在apc.enable_cli
中启用php.ini
。
但是使用ApcCache
作为控制台没有多大意义。 APCu缓存是按进程进行的,因此在命令结束后它将被删除,并且控制台命令不会与Web请求共享缓存。
主要用于测试和调试。设置此选项可启用APC for CLI的PHP版本。在正常情况下,在每个CLI请求上创建,填充和销毁APC缓存并不理想,但对于各种测试场景,能够轻松地为CLI版本的PHP启用APC非常有用。
https://secure.php.net/manual/en/apcu.configuration.php#ini.apcu.enable-cli