サーバーで重い処理を連続して行う際、Redisのqueueに突っ込んでバッチ処理させる時がたまにあります。
毎回queueとかredis-cliとか忘れるのでここにまとめます。
随時更新します。
queue:workerの起動
artisanコマンドでqueueに溜まったjobを実行できる。
--queue=で動かしたいqueueを指定しないと動かない。
--daemonはワーカーを常に起動しておくことで再起動によるCPU利用率を下げることができる。パフォーマンスが良い。
--timeoutは実行時間
$ php artisan queue:work --daemon --queue=mail,alert,default --tries=3 --timeout=0
ただ、jobのコードを変更した時などは変更の反映のために、ワーカーを再起動する必要がある。
ここらの処理はsupervisorを入れると自動で制御してくれる。
redis-cli
コマンドラインからRedisにアクセスできる。
$ redis-cli
jobの取得
Redisはkey-value型のNoSQLであるのでkeyを指定することで値を取得できる。
# keyを全て表示する
$ keys *
# 1) "hoge_id"
# 2) "Job\Hoge"
# keyの型を知ることができる
$ type hoge_id # string
$ type "Job\Hoge" # hash
# 値を取得。型によって取得コマンドが違う。
$ get hoge_id # 1
$ hgetall "Job\Hoge"
# 1) "throughput"
# 2) "52"
# 3) "runtime"
# 4) "100.0101"
jobの削除
特定のqueueやjobのデータを消したい時
$ del <消したいqueueの名前>
全てのデータを削除したい時。
*ログイン情報など重要なキャッシュも消してしまうので使う際には注意が必要。
$ flushdb
jobの作成方法
Laravel側でdispatch()してあげれば良い。HogeJobのhandler()が呼び出されます。
dispatch((new Job\HogeJob())->onQueue('Hoge'));
コマンド参考