从rack-cache中取消个别密钥?

时间:2016-03-18 06:57:08

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

让我们说我的rails app上的路径卡在机架缓存中。有没有办法说:" / games / zelda"应该从rack-cache中删除/无效?

2 个答案:

答案 0 :(得分:4)

<强> Assumtions

  1. 您的rails应用程序名为MyApp
  2. 您要清除的完整网址是http://www.myapp.com/games/zelda
  3. 第1步获取规范化密钥

    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

    metastore.purge(key)
    

    我希望这会有所帮助。

答案 1 :(得分:0)

您可以从Memcached实例中删除一个密钥或所有密钥。不幸的是,不允许列出所有密钥。因此,您无法迭代所有键,只删除要使其无效的键。

那说我看到两个选择:

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