Ruby で非同期処理をするライブラリ Sidekiq についてのメモ
Ruby で非同期処理をするのに Sidekiq を使い始めた
基本的な使い方については Rails - sidekiqの使い方 - Qiita を見れば分かる
上記記事に書かれてないことについてつらつらと自分用にメモを残しておく
いちいちワーカクラス書かないといけないの
ActiveRecord と ActionMailer に便利メソッドが自動的に生える
Delayed extensions · mperham/sidekiq Wiki
スケジューリングしたい
Scheduled Jobs · mperham/sidekiq Wiki
3時間後に実行したい場合こんな感じ
MyWorker.perform_in(3.hours, 'mike', 1) MyWorker.perform_at(3.hours.from_now, 'mike', 1)
どうせ Sidekiq のデーモン起動しっぱなしならその中で定期処理もさせたい
Sidetiq gem を使う
tobiassvn/sidetiq
毎日実行したい場合こんな感じ
class MyWorker include Sidekiq::Worker include Sidetiq::Schedulable recurrence { daily } def perform # 定期処理 end end
めちゃくちゃ重い処理するワーカがあるんだけど同時に同じ処理走らせたくない
例えばユーザが「最新の情報に更新」ボタンを押したら非同期処理するみたいやつ
連打されたら困る
SidekiqUniqueJobs を使う
mhenrixon/sidekiq-unique-jobs
同じ引数が渡された既に動いてるワーカがある場合無視してくれる
class MyWorker include Sidekiq::Worker sidekiq_options unique: true def perform(id) # めちゃくちゃ重い処理 end end MyWorker.perform_async(1) # 非同期処理 MyWorker.perform_async(1) # 無視される MyWorker.perform_async(2) # 非同期処理