【问题标题】:Cache with expiring keys带有过期键的缓存
【发布时间】:2013-08-12 21:55:10
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    是的,有ActiveSupport::Cache::Store

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

    某些实现可能不支持基本方法之外的所有方法 获取、写入、读取、存在?和删除的缓存方法。

    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
    

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 2020-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多