如何批处理后台作业,以便我不会在redis上耗尽内存?

时间:2016-02-19 14:03:41

标签: ruby-on-rails redis sidekiq

我正在向redis发送大约300万个简单作业(将随机字符串作为唯一ID保存到数据库中)。

  def self.update_public_ids
    Episode.where(public_id: nil).find_each{|e| UpdatePublicIds.perform_later(e.id)}
  end

def perform(episode_id)
  episode = Episode.find(episode_id)
  episode.set_public_id
end

def set_public_id
  code = generate_code
  self.public_id = code
  self.save
end

每次排队约90K个工作时,我都会收到此错误:

Redis::CommandError: EXECABORT Transaction discarded because of previous errors.

其他SO答案说这是由于redis上的内存不足造成的。我该怎么做才能避免这种情况?

0 个答案:

没有答案