Back

ruby - 延时任务sidekiq 的用法。(特别适合一种场景哈哈哈)

发布时间: 2019-05-20 07:46:00

参考:https://github.com/mperham/sidekiq

sidekiq 比delayed_job 好的点,就在于速度快!

我觉得特别特别特别适合我正在做的项目哈哈哈哈

前些日子被这个问题困扰了很久,现在终于知道了,内存化+数据库持久化,解决办法就是把数据库的操作sidekiq化.哈哈

执行速度: 4500 / s , delayed_job: 200/s 原因是前者放在redis中,后者放在 db中.

使用方式:

sinatra: 

1. app.rb:

先定义这个 worker
class TestWorker
  include Sidekiq::Worker
  # 注意: 这里传入的参数不能是复杂类型, 否则会出现serialize的错误。 
  # 所以如果需要对多个model进行操作时,一个model一个worker好了。
  def perform sleep_time 
    sleep sleep_time
  end
end 

然后在app.rb 中require

然后在app.rb 中:

TestWorker.perform_async(20)  

就可以了.

配置文件:config/sidekiq.yml

# 注意: 不要超过50 ,官方要求这样.默认是10并发
concurrency: 50

2. 运行sidekiq的命令:

bundle exec sidekiq -r ./app.rb

3. sidekiq的任务都保存在那里?

4. 传入的参数,需要是简单的json , hash , 不能是复杂的activerecord model

Back