rails生产环境并发读/写缓存数据

时间:2011-07-11 02:06:17

标签: ruby-on-rails caching concurrency

我有一个rails3应用程序,在生产环境中使用apache / passenger。 我有CarryingBill模型,它有一个bill_no属性,bill_no是在创建之前自动生成的,我使用Rails缓存(FileStore)来缓存当前的bill_no,当创建一个新的CarryingBill模型时,使用Rails.cache.read('bill_no')然后获取当前的bill_no值 设置CarryingBill实例bill_no,并调用Rails.cache.write('bill_no',current_bill_no + 1),依此类推。 但是当多用户并发创建CarryingBill模型时,生成的bill_no是重复的,如何解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

一种聪明的方法是使用id属性创建BillNo模型和coorresponaming表。每次创建CarryingBill时,都要创建一个新的BillNo记录并将其id分配给CarryingBill。这样你就可以使用db的自动生成的id作为你的唯一id制作者。

class CarryingBill
   before_create :make_bill_no
   def make_bill_no
       bill = BillNo.create
       self.bill_no = bill.id
   end
 end