Делать недействительными отдельные ключи из стойки кеша?
Допустим, путь в моем приложении rails застрял в кэше стойки. Есть ли способ сказать: "/games/zelda" следует удалить / сделать недействительным из кеша стойки?
2 ответа
Решение
Assumtions
- Ваше приложение рельсов названо
MyApp
- полный URL, который вы хотите удалить, находится по http://www.myapp.com/games/zelda.
Шаг 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.purge(key)
Надеюсь, это поможет.
Вы можете удалить один ключ или все ключи из экземпляра Memcached. К сожалению, не позволяет перечислить все ключи. Поэтому вы не можете перебрать все ключи и просто удалить тот, который хотите аннулировать.
Тем не менее, я вижу два варианта:
- Удалите все ключи в Memcached.
- Или измените путь в URI вашей конфигурации Memcached Storage и повторно кэшируйте все ключи.