Redis
 sql >> Base de données >  >> NoSQL >> Redis

Conditions de travail Sidekiq

Vous pouvez utiliser les tâches uniques Sidekiq

avec cette approche, un seul travail avec les mêmes paramètres sera présent simultanément.

alors créez un modèle

class UserJobs
  belongs_to :user
end

class User
  has_many :user_jobs
end

class Worker
  sidekiq_options unique: true

  def perform params
    user = User.find(params[:id])
    user.user_jobs.order('id asc').each do |job|
      job.worker_class.constantize.new.perform(job.params)
      job.destroy
    end
  end
end

que lorsque vous avez besoin d'exécuter n'importe quel travail pour l'utilisateur :

user.user_jobs.create worker_class: Klass, params: params
Worker.perform_async(user_id: user.id)