Memcached 什么是;“每种板类一页”;限制是指使用memdump转储密钥时的限制?
出于调试目的,我想计算memcache服务器中的密钥数,因此我做了一些研究,最后使用了libmemcached附带的实用程序 在命令的描述中,它表示: memdump从所有服务器转储一个“密钥”列表,让它从中获取。因为memcached不能保证提供所有密钥,所以不可能获得完整的“转储” 在另一个网站()上,我读到: […]memcache协议提供了一些命令,用于查看由平板组织的数据(给定大小范围的数据类别)。但也存在一些重大限制:Memcached 什么是;“每种板类一页”;限制是指使用memdump转储密钥时的限制?,memcached,Memcached,出于调试目的,我想计算memcache服务器中的密钥数,因此我做了一些研究,最后使用了libmemcached附带的实用程序 在命令的描述中,它表示: memdump从所有服务器转储一个“密钥”列表,让它从中获取。因为memcached不能保证提供所有密钥,所以不可能获得完整的“转储” 在另一个网站()上,我读到: […]memcache协议提供了一些命令,用于查看由平板组织的数据(给定大小范围的数据类别)。但也存在一些重大限制: 每个楼板类只能转储关键帧(内容大小大致相同的关键帧) 每个sl
在实践中,每个slab类只能转储一页(1MB数据)
意味着什么呢?一兆字节的数据是什么?如果一个板包含超过1MB的数据(包括键?),那么剩余的数据将不会被提取,我可能会丢失一些键
作为一个exmaple,我有3个键A和500 KB的数据,B和另外600 KB的数据,C和300 KB的数据,它们都放在同一块板上。然后,在转储密钥时,只有A和B会被转储数据(也可能会被切断?
memdump
实用程序使用memcache protocol undocumented命令stats cachedump
按slab id获取密钥列表。您可以在memcached源代码中查看stats cachedump
实现:
char*item\u cachedump(const unsigned int slab\u clsid,const unsigned int limit,unsigned int*bytes){
unsigned int memlimit=2*1024*1024;/*2MB最大响应大小*/
而(它!=NULL&(限制==0 | |显示<限制)){
//…此处发生密钥复制
如果(bufcurr+len+6>memlimit)/*6是END\r\n\0*/
打破
// ...
}
因此,如果不重新编译memcached,则不可能在给定的每个板上获得超过2MB的密钥。值不会复制到响应缓冲区,响应大小限制仅适用于密钥。
memdump
实用程序使用memcache protocol undocumented命令stats cachedump
按板id获取密钥列表。您可以查看de>stats cachedump在memcached源代码中的实现:
char*item\u cachedump(const unsigned int slab\u clsid,const unsigned int limit,unsigned int*bytes){
unsigned int memlimit=2*1024*1024;/*2MB最大响应大小*/
而(它!=NULL&(限制==0 | |显示<限制)){
//…此处发生密钥复制
如果(bufcurr+len+6>memlimit)/*6是END\r\n\0*/
打破
// ...
}
因此,如果不重新编译memcached,则不可能在给定的每个板上获得超过2MB的键。值不会复制到响应缓冲区,响应大小限制仅适用于键。Ah所以基本上我可以获得1MB的键?@Max正如您从memcached源代码中看到的,
cachedump
所以,是的,你可以得到1MB的密钥。啊,基本上我可以得到1MB的密钥?@Max,正如你从memcached源代码中看到的,cachedump
命令的响应缓冲区大小有2MB的严格限制。所以,是的,你可以得到1MB的密钥。
char *item_cachedump(const unsigned int slabs_clsid, const unsigned int limit, unsigned int *bytes) {
unsigned int memlimit = 2 * 1024 * 1024; /* 2MB max response size */
while (it != NULL && (limit == 0 || shown < limit)) {
// ... key copying occurs here
if (bufcurr + len + 6 > memlimit) /* 6 is END\r\n\0 */
break;
// ...
}