0

我对 Rails 2.3.4 应用程序有一个奇怪的问题。expires_in 时间设置为每小时后 10 秒。但即使在缓存刷新之后,memcache 似乎也能记住该值。

caches_action :deals, :expires_in => (3600 - Time.now.to_i % 3600) + 10,
  :cache_path => Proc.new { |controller| "blah" }

内存缓存输出:

<8 new client connection  
<8 get mynamespace:views/show  
>8 END  
<8 set mynamespace:views/show 0 1457 20499  
>8 STORED  
<9 new client connection  
<9 flush_all
>9 OK  
<9 connection closed.  
<8 get mynamespace:views/show  
>8 END  
<8 set mynamespace:views/show 0 1457 20499  
>8 STORED  
4

2 回答 2

1

试着把你的expires_in价值放在一个过程中。

编辑:我忘了提到.call最后调用proc。

于 2011-09-28T17:20:03.743 回答
1

确保您实际使用的是memcached,而不是 rails 默认的缓存机制。你的 environment.rb 中应该有这样的东西:

config.cache_store = :mem_cache_store

我在尝试使用 :expires_in 进行缓存时遇到了类似的问题,我没有意识到需要上述内容。如果没有它,rails 默认使用 FileStore 或 MemoryStore,它们都会很高兴地坐在那里缓存,但忽略 :expires_in 选项。

感谢Rob Anderton 撰写的关于 memcached 基础知识的这篇文章,帮助我最终解决了这个问题

于 2011-11-15T16:26:30.033 回答