缓存API响应,直到被告知要发布?

时间:2015-07-21 15:13:17

标签: ruby-on-rails ruby-on-rails-4 caching

我有以下型号:

class User < ActiveRecord::Base
  def stripe_plan_id
    self.stripe_subscription.plan.id
  end

  def stripe_subscription
    customer = Stripe::Customer.retrieve(self.stripe_customer_id)
    customer.subscriptions.retrieve(self.stripe_subscription_id)
  end
end

我有模型属性stripe_plan_id我不希望它使用ActiveRecord在数据库中持久存在,但我需要经常检查这个参数。我想将它缓存在我的服务器上,并按需刷新它。理想情况下,我不想使用redis。

最好的方法是什么?如果可以某种方式使用||=,我正在努力解决。

1 个答案:

答案 0 :(得分:0)

有很多方法,我假设您已经知道如何使用您拥有的任何内容(memcached,redis,rails.cache等)进行缓存,如果不是这样,请告诉我。我建议创建一个基于id获取或重新加载缓存的缓存类。你的记忆不适用于你的情况,因为你想在控制器之间保持。

@report.fields = template.fields

然后当你想要得到这个时,你只需要打电话

def StripeCache < Struct.new(:user)

  def cache_key
    "#{user.id}_stripe_plan_id"
  end 

  def get
    ReadFromCache(cache_key)
  end

  def reload
    WriteToCache(cache_key, user.stripe_plan_id)
  end
end

并保存您调用的新内容

StripeCache.new(user).get

是一个额外的开销,但会抽象所有读取和写入缓存。