使用过期密钥缓存

时间:2013-08-11 13:45:15

标签: ruby-on-rails ruby caching web-scraping mashup

我正在使用mashup网站,并希望限制抓取源网站的抓取次数。我需要的数据基本上只有一位,一个整数,并且希望用定义的有效期来缓存它。

为了澄清,我只想缓存整数,而不是整个页面源。

是否有红宝石或铁轨功能或宝石已经为我完成了这个?

2 个答案:

答案 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