Ruby memcached:CACHE.stats[:curr_items]通常会减少

Ruby memcached:CACHE.stats[:curr_items]通常会减少,ruby,memcached,Ruby,Memcached,我们在RubyonRails应用程序中使用Memcached。我试图更详细地研究它,在每个请求结束时,我注销CACHE.stats[:curr\u items]的值,我认为是缓存中保存的项目数 我在请求开始和结束时记录CACHE.stats[:curr\u items]的值,这允许我查看在该请求(页面加载)中有多少新事物被保存到缓存中。通常,这是一个负数-也就是说,CACHE.stats[:curr\u items]的值降低了 我不明白为什么它会减少。我们从来没有删除过任何缓存键,我无法想象为什

我们在RubyonRails应用程序中使用Memcached。我试图更详细地研究它,在每个请求结束时,我注销
CACHE.stats[:curr\u items]
的值,我认为是缓存中保存的项目数

我在请求开始和结束时记录
CACHE.stats[:curr\u items]
的值,这允许我查看在该请求(页面加载)中有多少新事物被保存到缓存中。通常,这是一个负数-也就是说,
CACHE.stats[:curr\u items]
的值降低了

我不明白为什么它会减少。我们从来没有删除过任何缓存键,我无法想象为什么仅仅通过重新加载同一个页面就可以减少缓存键

我还希望
CACHE.stats[:curr\u items]
在执行
CACHE.flush
之后变为0,但它保持不变

我有另一种列出当前memcache密钥的方法,它与memcache建立telnet连接,并使用
stats items
stats cachedump
列出当前密钥。这个数字通常不同于
CACHE.stats[:curr\u items]
,而且,如果我执行
CACHE.flush
,这个数字也不会变为零

有人能解释一下CACHE.stats[:curr\u items]实际上做了什么吗

另外,为什么这两种方法在
CACHE.flush
之后都不归零?可能CACHE.flush会使缓存密钥无效,但实际上不会删除它们。这很公平,如果是这样的话,也是有道理的

编辑:我刚刚做了一个实验:

> CACHE.stats[:curr_items]
=> [529]
> CACHE.stats[:total_items]
=> [1080]
> stored = CACHE.add("qwrexcv#{rand(10000000)}", User.last, 604800)
=> nil
> CACHE.stats[:curr_items]
=> [529]
> CACHE.stats[:total_items]
=> [1081]
所以,我在缓存中添加了一个新东西。curr_项目保持不变,而total_项目增加,进一步支持curr_项目不是我认为的那样的观点

curr\u items
中所述,显示当前缓存中的项目数
total_items
是自服务器启动以来保存的所有项目数

据我所知,有四种方法可以减少
curr_items
计数器:(I)删除密钥,(ii)刷新,(iii)过期,以及(iv)缩小memcached服务器的可用内存。逐出通常不会减少项目,因为逐出项目通常是为了为新项目腾出空间

flush_all
memcached命令至少在memcached 1.5中将
curr_items
计数器设置为0。您可以通过telnet连接验证这一点。memcached 1.4的行为可能有所不同,因为从1.4版到1.5版有很多更改。

curr\u items
中所述,显示了当前缓存中的项目数
total_items
是自服务器启动以来保存的所有项目数

据我所知,有四种方法可以减少
curr_items
计数器:(I)删除密钥,(ii)刷新,(iii)过期,以及(iv)缩小memcached服务器的可用内存。逐出通常不会减少项目,因为逐出项目通常是为了为新项目腾出空间


flush_all
memcached命令至少在memcached 1.5中将
curr_items
计数器设置为0。您可以通过telnet连接验证这一点。memcached 1.4的行为可能会有所不同,因为从1.4版到1.5版有很多变化。

确定只使用memcached吗?要清除memcached,它必须是
Rails.cache.clear
。什么是
cache
?您是对的统计信息[:curr_items]显示当前项目。可通过Rails.cache.fetch('key')do进行测试;用户优先;结束在这之后应该增加1,同时检查memcached配置是否在中有密钥expires\u,然后密钥自动过期。谢谢-我在这个项目中使用了非常旧的ruby(1.8.7)和rails(2.2.2)版本,缓存是我通过rails访问memcached的方式。我可以用Rails.cache访问它,但我不能用这种方式访问统计数据。请参阅我的编辑,谢谢。您是否只使用memcached?要清除memcached,它必须是
Rails.cache.clear
。什么是
cache
?您是对的统计信息[:curr_items]显示当前项目。可通过Rails.cache.fetch('key')do进行测试;用户优先;结束在这之后应该增加1,同时检查memcached配置是否在中有密钥expires\u,然后密钥自动过期。谢谢-我在这个项目中使用了非常旧的ruby(1.8.7)和rails(2.2.2)版本,缓存是我通过rails访问memcached的方式。我可以用Rails.cache访问它,但我不能用这种方式访问统计数据。请参阅我的编辑,谢谢