2017-03-15 29 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等)。

相關問題