Rails.cache.read после Rails.cache.increment не дает правильного значения

Использование Rails 3 с memcachestore и гемом memcache-client.

Локальный кэш памяти на macbook-pro или серверы кэша памяти в промежуточной среде.

Когда я делаю

Rails.cache.increment(key, 1)

за которым очень быстро (в нескольких строках) следует

Rails.cache.read(key, :raw => true)

Я получаю исходное значение. Если он сидит секунду, а затем я вызываю чтение (или в консоли), я получаю правильно увеличенное значение.

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

Любые идеи?


person Jakanapes    schedule 26.04.2011    source источник
comment
Похоже, это проблема, связанная с событиями. Вы не используете EventMachine?   -  person Daniel    schedule 23.05.2011


Ответы (1)


Эта проблема описана в сообщении блога http://thomasmango.com/2009/06/25/a-better-rails-cache-increment/

и предлагаемое исправление:

class Util::Cache
  def self.increment(key, amount = 1)
    if (value = Rails.cache.read(key)).nil?
      Rails.cache.write(key, (value = amount))
    else
      Rails.cache.write(key, (value = value + amount))
    end

    return value
  end

  def self.decrement(key, amount = 1)
    if (value = Rails.cache.read(key)).nil?
      value = 0
    else
      Rails.cache.write(key, (value = value - amount))
    end

    return value
  end
end
person Simon B.    schedule 06.12.2013