После отладки через код Rails я мог подтвердить, что key
действительно был стабильным. То, что печатается в журнале сервера, включает версию только для целей отладки, но ключ, хранящийся в вашем кеше, на самом деле не содержит версию.
Версия хранится вместо этого в сериализованном объекте в кэше, который является экземпляром ActiveSupport::Cache::Entry
и содержит attr_reader :version
. Итак, если вы похожи на меня, вы бы предположили, что кеш (например, необработанный HTML) был сохранен непосредственно в memcached, но на самом деле он хранится в атрибуте value
этого ActiveSupport::Cache::Entry
(который также имеет version
атрибут, если у вас включено cache_versioning
), и весь этот объект сохраняется сериализованным в кэш.
Если вы хотите подтвердить это самостоятельно, вы можете проверить свой собственный журнал memcached в реальном времени. Если вы работаете на Mac, сначала остановите его (я предполагаю, что он был установлен вместе с homebrew) с помощью brew services stop memcached
, запустите его на переднем плане с подробным режимом с memcached -vv
и посмотрите на ключи, запрошенные rails. После того, как вы закончите изучение, brew services start memcached
снова включит memcached в качестве демона.
Кроме того, если вы мигрируете по-старому (без утилизируемых ключей кеша), вы должны сначала стереть кеш с помощью Rails.cache.clear
в консоли. Не забудьте сделать это и в производстве.
Если вы хотите больше узнать о том, как это работает, хорошее чтение - https://dzone.com/articles/cache-invalidation-complexity-rails-52-and-dalli-c
, но отладка кода rails с помощью binding.pry
была тем, что мне стало ясно.
Короче говоря, это очень блестящая реализация, на мой взгляд, и рециркуляция кеша просто делает его намного лучше (в статье цитируется DHH, говорящая: «Мы пошли от того, что смогли сохранить только 18 часов кеширования, я считаю, , 3 недели. Это был самый большой прирост производительности, который Basecamp 3 когда-либо видел. ')