Что делать при получении / создании кеша, который пуст? Memcached, Rails 3 - PullRequest
1 голос
/ 04 февраля 2012

Итак, сейчас у пользователей есть список элементов, которые меняются, но не слишком часто, поэтому я решил сохранить его в кеше примерно так:

  #Fetch the cache
  def self.fetch_cache(user)
    Rails.cache.fetch(user.items, :expires_in => 15.minutes) do
      user.items.order("created_at ASC").all
    end    
  end

Это работает, если у пользователя есть предметы. Проблема в том, что если у пользователя нет элементов (потому что они новый пользователь или что-то в этом роде), и кеш выдаст ошибку.

Как мне использовать это, чтобы оно работало для пользователей, у которых ничего нет?

Спасибо!

1 Ответ

3 голосов
/ 04 февраля 2012

Вы используете действительно странный ключ кеша (первый аргумент Rails.cache.fetch).Предполагается, что вы передаете строку, которая идентифицирует запись в кэше, но вы передаете ассоциацию.

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

Что-то вроде "user_#{user.id}_items" будетгораздо лучше ключ кеша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...