Redisによるタイミングタスクの実現にはcrontabは全く必要ありません
2335 ワード
主な原理
Redisの期限切れ通知イベント1を利用する.redis構成daemonize yes//デーモンここでnotify-keyspace-eventsを構成するパラメータは「Ex」です.xは期限切れイベント2を表す.パッケージredisクラス
3.期限切れの通知を受けるここではtp 5のコマンドモードを使用しています.フレームワークがコマンドモードをサポートすれば便利です.
4.コマンドをバックグラウンドに掛けてnohup php/home/www/app/think test&jobs#が有効かどうかを確認ps aux|grep php#を実行してから見てもいい.必要な場所で期限切れイベントsetex orderを設定します.1 5 chokingwinするとorderメソッドが自動的にトリガーされ、パラメータは「」後ろの1
注意事項
コードが変更された場合は、killがnohupを削除し、もう一度起動してください.
chokingwinの文章に感謝
Redisの期限切れ通知イベント1を利用する.redis構成daemonize yes//デーモンここでnotify-keyspace-eventsを構成するパラメータは「Ex」です.xは期限切れイベント2を表す.パッケージredisクラス
redis = new \Redis();
$this->redis->connect($host, $port);
$this->setOption();
}
public function expire($key = null, $time = 0)
{
return $this->redis->expire($key, $time);
}
public function psubscribe($patterns = array(), $callback)
{
$this->redis->psubscribe($patterns, $callback);
}
public function setOption()
{
$this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
}
}
3.期限切れの通知を受けるここではtp 5のコマンドモードを使用しています.フレームワークがコマンドモードをサポートすれば便利です.
setName('test')->setDescription('Here is the remark ');
}
protected function execute(Input $input, Output $output)
{
$redis = new MyRedis();
$redis->psubscribe(array('__keyevent@0__:expired'),
function ($redis, $pattern, $chan, $msg) use ($output) {
if ($pattern = '__keyevent@0__:expired' && $msg) {
$array = explode('_', $msg);
$function = $array['0'];
$this->$function($array['1']);
$output->writeln($msg);
}
});
}
/*
*
*/
public function order($id)
{
$Order = Order::get($id);
$a=mt_rand(10000,99999);
$data['status'] = $a;
$Order->save($data);
}
}
4.コマンドをバックグラウンドに掛けてnohup php/home/www/app/think test&jobs#が有効かどうかを確認ps aux|grep php#を実行してから見てもいい.必要な場所で期限切れイベントsetex orderを設定します.1 5 chokingwinするとorderメソッドが自動的にトリガーされ、パラメータは「」後ろの1
注意事項
コードが変更された場合は、killがnohupを削除し、もう一度起動してください.
chokingwinの文章に感謝