Ruby memcached:CACHE.stats[:curr_items]通常会减少
我们在RubyonRails应用程序中使用Memcached。我试图更详细地研究它,在每个请求结束时,我注销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]的值降低了 我不明白为什么它会减少。我们从来没有删除过任何缓存键,我无法想象为什
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访问它,但我不能用这种方式访问统计数据。请参阅我的编辑,谢谢