我正在使用mashup网站,并希望限制抓取源网站的抓取次数。我需要的数据基本上只有一位,一个整数,并且希望用定义的有效期来缓存它。
为了澄清,我只想缓存整数,而不是整个页面源。
是否有红宝石或铁轨功能或宝石已经为我完成了这个?
答案 0 :(得分:9)
是的,有ActiveSupport::Cache::Store
抽象缓存商店类。有多个缓存存储 实现,每个都有自己的附加功能。见 ActiveSupport :: Cache模块下的类,例如 ::的ActiveSupport ::缓存MemCacheStore都。 MemCacheStore目前是 适用于大型制作网站的最受欢迎的缓存商店。
某些实现可能不支持基本以外的所有方法 缓存fetch,write,read,exists?和delete的方法。
ActiveSupport :: Cache :: Store可以存储任何可序列化的Ruby对象。
http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html
cache = ActiveSupport::Cache::MemoryStore.new
cache.read('Chicago') # => nil
cache.write('Chicago', 2707000)
cache.read('Chicago') # => 2707000
关于到期时间,可以通过将时间作为初始化参数
来完成cache = ActiveSupport::Cache::MemoryStore.new(expires_in: 5.minutes)
如果要缓存具有不同过期时间的值,也可以在将值写入缓存时设置此值
cache.write(key, value, expires_in: 1.minute) # Set a lower value for one entry
答案 1 :(得分:2)
请参阅Caching with Rails,尤其是ActiveSupport::Cache::Store
的:expires_in
选项。
例如,你可以去:
value = Rails.cache.fetch('key', expires_in: 1.hour) do
expensive_operation_to_compute_value()
end