Rails.cache.increment后面的Rails.cache.read没有给出正确的值

时间:2011-04-26 15:58:20

标签: ruby-on-rails-3 caching memcached

将Rails 3与memcachestore和memcache-client gem一起使用。

登台环境中的macbook-pro或memcache服务器上的本地内存缓存。

我做的时候

Rails.cache.increment(key, 1)

跟随

非常快(几行)
Rails.cache.read(key, :raw => true)

我得到了原来的价值。如果它坐了一秒然后我调用read(或在控制台中),我得到正确递增的值。

在我的工作中,我正在使用增量调用中返回的值,但这似乎不应该发生。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此问题在博文中有所描述   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