В настоящее время существует две проблемы с тем, чтобы хранить объекты ActiveRecord в memcached.
Неопределенная проблема Класса/Модуля (поиск Google). Из того, что я читал, это - все еще ошибка, для которой ни у кого нет очень хорошего решения. cache_fu плагин имеет, вероятно, лучшее решение для этого, перенося получать вызов в блоке, который пытается зафиксировать эту ошибку, анализирует сообщение и попытки загрузить неопределенный класс/модуль.
Печально известный билет № 1339 ЛЮФТГАНЗЫ (Билет ЛЮФТГАНЗЫ). Эта ошибка только произойдет, когда у Вас будет набор cache_classes ко ЛЖИ (разработка, тест).
После поиска с помощью Google в течение многих недель я все еще не нашел хорошую технику для хранения экземпляров AR в memcached, не имея необходимость заниматься этими 2 упомянутыми выше проблемами.
Идея, которую я не попробовал еще, удаляет атрибуты из экземпляра как строки (как AR получает их от DB, прежде чем это сделает свое преобразование типа), храня тех, которые в memcached и затем на извлечении от кэша, так или иначе инстанцируют объекта AR, использующего эти значения. Действительно ли это возможно? Если так, что лучший способ состоит в том, чтобы сделать это?
Я просто ищу способы, которыми другие разработчики направляющих занялись этой проблемой.
В наших проектах мы храним объект как XML.
cache.write(user.cache_key, user.to_xml) # write to cache
User.new(Hash.from_xml(cache.read(cache_key))) # reach from cache xml
Сериализация/де-сериализация XML требует некоторых дополнительных затрат. Но это позволило нам разделить кэш между приложениями, не использующими Ruby.