我的memcached服务器上的统计数据显示了一种奇怪的关系:total_items小于cmd_set。在此服务器上运行的操作仅为"设置"one_answers"获取",而不是基于"添加"、"替换"、"删除"或CAS的操作。
当我浏览memcached源代码时,我看到任何"正常"集(w/o CAS)都将替换或写入项,并且两者都将增加total_items。
do_store_item() {
// ...
if (old_it != NULL)
item_replace(old_it, it, hv);
else
do_item_link(it, hv);
// ...
}
do_item_link()增加total_items,item_replace()也调用do_item-link()。那么total_items怎么能小于cmd_set呢?
memcached统计数据摘录(为了可读性,数字缩进):
STAT cmd_set 12827359728
STAT total_items 4237422053
STAT curr_items 60745375
STAT expired_unfetched 9898430934
STAT evicted_unfetched 30415090
STAT evictions 30421532
STAT reclaimed 9900995350
统计数据看起来很奇怪,因为它们是错误的。这是一个memcached错误(整数在2^32溢出)。memcached开发人员已经确认并修复了它。有关更多详细信息,请参阅https://github.com/memcached/memcached/issues/161.