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

问题描述 投票:0回答:1

我们在Ruby on Rails应用程序中使用Memcached。我正在尝试更详细地研究它,并在每个请求结束时我注销CACHE.stats[:curr_items]的值,我认为是缓存中保存项目的数量。

我在请求的开头和结尾记录了CACHE.stats[:curr_items]的值,这样我就可以看到在该请求中有多少新东西被保存到缓存中(页面加载)。很多时候,这是一个负数 - 也就是说,CACHE.stats[:curr_items]的价值已经下降。

我无法理解它为什么会减少。我们永远不会删除任何缓存键,我无法想象为什么它只会通过重新加载相同的页面而减少。

我也希望CACHE.stats[:curr_items]在做CACHE.flush之后变为0,但它保持不变。

我有另一种列出当前memcache密钥的方法,它使用telnet连接到memcache并使用stats itemsstats cachedump列出当前密钥。这个数字通常与CACHE.stats[:curr_items]不同,而且,如果我做CACHE.flush,也不会变为零。

谁能解释一下CACHE.stats[:curr_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_items保持不变,total_items也增加了,这进一步支持了curr_items不是我认为的那种想法。

ruby memcached
1个回答
0
投票

memcached docs中所述,curr_items显示当前缓存中的项目数。 total_items是自服务器启动以来保存的所有项目的数量。

据我所知,curr_items计数器有四种减少方式:(i)删除密钥,(ii)刷新,(iii)到期,以及(iv)缩小memcached服务器可用的内存。驱逐通常不会减少物品,因为物品通常被驱逐以为新物品腾出空间。

flush_all memcached命令确实将curr_items计数器设置为0,至少在memcached 1.5中。您可以使用telnet连接验证。对于memcached 1.4,行为可能会有所不同,因为很多版本已从1.4版更改为1.5版。

© www.soinside.com 2019 - 2024. All rights reserved.