我已经在Stack Overflow和其他地方多次读到stats cachedump
不受支持,即将被删除,仅限于转储1MB等内容。但是,由于我刚开始使用memcached ,列出所有我在开发中设置的键非常方便。
但是,我目前得到的结果非常不一致,几乎没有用。请参阅此示例会话,其中我清除了所有内容,然后设置了三个非常小的项目(为清楚起见添加了空行):
flush_all
set key1 0 0 3
aaa
STORED
set key2 0 0 3
bbb
STORED
set key3 0 0 3
ccc
STORED
然后stats items
说平板1中有3个项目,如预期:
stats items
STAT items:1:number 3
STAT items:1:number_hot 0
STAT items:1:number_warm 0
STAT items:1:number_cold 3
STAT items:1:age_hot 0
STAT items:1:age_warm 0
STAT items:1:age 3
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
STAT items:1:evicted_active 0
STAT items:1:crawler_reclaimed 0
STAT items:1:crawler_items_checked 0
STAT items:1:lrutail_reflocked 57
STAT items:1:moves_to_cold 23
STAT items:1:moves_to_warm 20
STAT items:1:moves_within_lru 0
STAT items:1:direct_reclaims 0
STAT items:1:hits_to_hot 0
STAT items:1:hits_to_warm 0
STAT items:1:hits_to_cold 23
STAT items:1:hits_to_temp 0
END
但是当我尝试列出Slab 1中的所有项目时,结果完全不一致。经常列出3个中的2个任意键,但有时列出全部3个(这证明数据全部存在并且尚未被清除):
stats cachedump 1 0
ITEM key1 [3 b; 0 s]
ITEM key2 [3 b; 0 s]
END
stats cachedump 1 0
ITEM key3 [3 b; 0 s]
ITEM key2 [3 b; 0 s]
END
stats cachedump 1 0
ITEM key2 [3 b; 0 s]
ITEM key1 [3 b; 0 s]
END
stats cachedump 1 0
ITEM key2 [3 b; 0 s]
ITEM key1 [3 b; 0 s]
ITEM key3 [3 b; 0 s]
END
stats cachedump 1 0
ITEM key2 [3 b; 0 s]
ITEM key1 [3 b; 0 s]
ITEM key3 [3 b; 0 s]
END
stats cachedump 1 0
ITEM key2 [3 b; 0 s]
ITEM key3 [3 b; 0 s]
END
该怎么做?这是预期的行为吗?
我正在macOS上使用最新的内存缓存版本1.5.8。
答案 0 :(得分:0)
正如this GitHub issue中回答的那样,转储最新版本的memcached中所有密钥的正确方法是使用lru_crawler metadump 1
(或lru_crawler metadump all
)。