4

我正在开发一个混搭站点,并希望限制抓取源站点的次数。本质上,我需要一位数据,一个整数,并希望在定义的有效期内缓存它。

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

是否有 ruby​​ 或 rails 功能或 gem 已经为我完成了这项工作?

4

2 回答 2

9

就在这里ActiveSupport::Cache::Store

一个抽象缓存存储类。有多个缓存存储实现,每个都有自己的附加功能。查看 ActiveSupport::Cache 模块下的类,例如 ActiveSupport::Cache::MemCacheStore。MemCacheStore 是目前最流行的大型生产网站缓存存储。

某些实现可能不支持 fetch、write、read、exist? 和 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
于 2013-08-11T14:00:03.080 回答
2

请参阅使用 Rails:expires_in进行缓存,尤其是ActiveSupport::Cache::Store.

例如,你可能会去:

value = Rails.cache.fetch('key', expires_in: 1.hour) do
    expensive_operation_to_compute_value()
end
于 2013-08-11T14:05:02.153 回答