Как кешировать объекты, хранить их по нескольким запросам? - PullRequest
5 голосов
/ 10 марта 2010

Я использую Ruby on Rails и мне нужно сохранить набор результатов поиска, полученный при подключении к другому серверу.Проблема в том, что я не хочу хранить результирующий набор в сеансе и хочу что-то, где я могу сохранить объект результирующего набора по нескольким запросам.

Запросы требуют времени, поэтому я не хочу их повторять.Есть ли способ хранить объекты или кэшировать объекты, чтобы мне не приходилось запрашивать их снова и снова?

Можно ли использовать какое-то хранилище объектов?

Любая помощь была бы полезной.

Если запоминание является опцией, как запоминать объекты?Соединение все равно займет время, чтобы сохранить набор результатов.

Ответы [ 3 ]

1 голос
/ 10 марта 2010

Памятка работает только в одном запросе. Нельзя использовать в нескольких запросах.

Все запросы имеют все ресурсы хранения, такие как Memcache или BDD. Если вы используете ActiveSupport :: Cache :: MemCacheStore . Вы можете нажать и получить все объекты во всех ваших запросах.

1 голос
/ 10 марта 2010

Если вам нужно хранить данные между запросами, скорее всего, это не то, что вы ищете.Мемоизация обычно используется в Ruby / Rails, когда вы вызываете один и тот же метод несколько раз в рамках одного запроса, и этот метод дорогостоящий (либо интенсивное использование процессора, несколько запросов к БД и т. Д.).

Вы можете запомнить метод, который сохраняет результат в переменной экземпляра, и при следующем вызове возвращается значение переменной экземпляра, а не переоценка метода.Есть масса ресурсов на это, если вы хотите изучить это дальше.

Для данных, которые должны сохраняться между сеансами и, возможно, должны быть разделены между различными пользователями, я настоятельно рекомендую memcached.Rails имеет некоторую встроенную поддержку для него, поэтому не должно быть слишком сложно найти хорошие ресурсы.

1 голос
/ 10 марта 2010

Если вы не хотите сохранять это в сеансе, очевидно, у вас есть варианты здесь.

Вы можете временно хранить в своей БД (я предполагаю, что запрос к БД быстрее, чем повторная загрузка с другого сервера :)).

Также есть возможность использовать что-то вроде memcached. Хотя вы должны знать, что его перезапуск отбросит все ваши данные.

Зависит от того, что вам нужно достичь и как вам нужно обрабатывать ваши данные.

...