我正在向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上的内存不足造成的。我该怎么做才能避免这种情况?