【问题标题】:Invalidating individual keys from rack-cache?使机架缓存中的单个密钥无效?
【发布时间】:2016-07-04 20:00:12
【问题描述】:

假设我的 Rails 应用程序中的一条路径卡在了机架缓存中。有没有办法说:“/games/zelda”应该从机架缓存中删除/失效?

【问题讨论】:

  • 你用什么storage
  • @spickermann 我使用 Dalli/memcached。

标签: ruby-on-rails ruby ruby-on-rails-4 rack rack-cache


【解决方案1】:

假设

  1. 您的 rails 应用程序名为 MyApp
  2. 您要清除的完整网址是http://www.myapp.com/games/zelda

第一步获取归一化密钥

mock_request = Rack::MockRequest.env_for('/games/zelda', {"SERVER_NAME"=>"www.myapp.com"})
key = Rack::Cache::Key.call(Rack::Cache::Request.new(mock_request))

第 2 步检索存储对象

metastore_uri = MyApp::Application.config.action_dispatch.rack_cache[:metastore]
entitystore_uri = MyApp::Application.config.action_dispatch.rack_cache[:entitystore]

metastore = Rack::Cache::Storage.instance.resolve_metastore_uri(metastore_uri)
entitystore = Rack::Cache::Storage.instance.resolve_entitystore_uri(entitystore_uri)

第 3 步检索元数据

stored_meta = metastore.read(key)

第 4 步清除每种压缩类型的实体存储

stored_meta.each do |sm|
  entitystore.purge(sm[1]["X-Content-Digest"])
end

第 5 步清除元存储

metastore.purge(key)

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以从 Memcached 实例中删除一个键或所有键。不幸的是,不允许列出所有键。因此,您不能遍历所有键,而只删除要使其无效的键。

    也就是说我看到了两个选项:

    1. 删除 Memcached 中的所有键。
    2. 或更改Memcached Storage 配置的URI 中的路径并重新缓存所有键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      相关资源
      最近更新 更多