2017-03-15 49 views
0

我已经知道我不能把它作为一个受保护的变量存储在命令类本身上(我试过了,那不起作用)。有没有一种方法可以在命令的执行之间存储数据,而无需将该信息存储在数据库中或写入文件?我可以在执行Symfony2命令之间存储一个值吗?

基本上,我每隔2分钟通过cron运行一个命令,但我想设置一个标志,每次运行命令时都会更改。

以下情况不起作用,因为每次运行命令时,受保护的变量都被初始化为snc_redis.dashboard1

protected $redisDb = 'snc_redis.dashboard1'; 

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    if ($this->redisDb == 'snc_redis.dashboard1') { 
     $this->redisDb = 'snc_redis.dashboard2'; 
    } 
    else { 
     $this->redisDb = 'snc_redis.dashboard1'; 
    } 
} 
+0

也许你可以将它存储在某种内存缓存中。你有没有听说过Memcache? –

+0

是的,我以前使用过memcache,但不是直接使用。我完全可以将这个值存储在redis数据库的某个地方,我只是想知道是否在symfony中内置了一个方法来在命令执行之间持久化属性? –

+0

每个Php执行都有一个完全清晰的上下文,因此除非将其保存到磁盘或内存a,否则每次执行时生成的信息都会消失。 – Carlos

回答

5

我已经知道我不能只将其存储作为命令类本身(我尝试过了,不工作),受保护的变量。

这是因为每次运行命令它都是一个新进程。

有没有在命令的执行之间存储数据而不将该信息存储在数据库中或写入文件的方法?

同样,每个命令在单独进程中运行,所以没有它们之间共享存储器。用APCu存储你的东西的事件将不起作用(出于同样的原因)。

如果你想在运行之间坚持一些东西,你需要存储一些可以在进程之间共享的缓存(比如文件系统,数据库,redis/memcached等)。

相关问题