Делать недействительными отдельные ключи из стойки кеша?

Допустим, путь в моем приложении rails застрял в кэше стойки. Есть ли способ сказать: "/games/zelda" следует удалить / сделать недействительным из кеша стойки?

2 ответа

Решение

Assumtions

  1. Ваше приложение рельсов названо MyApp
  2. полный 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. К сожалению, не позволяет перечислить все ключи. Поэтому вы не можете перебрать все ключи и просто удалить тот, который хотите аннулировать.

Тем не менее, я вижу два варианта:

  1. Удалите все ключи в Memcached.
  2. Или измените путь в URI вашей конфигурации Memcached Storage и повторно кэшируйте все ключи.
Другие вопросы по тегам