Memcached 什么是;“每种板类一页”;限制是指使用memdump转储密钥时的限制?

Memcached 什么是;“每种板类一页”;限制是指使用memdump转储密钥时的限制?,memcached,Memcached,出于调试目的,我想计算memcache服务器中的密钥数,因此我做了一些研究,最后使用了libmemcached附带的实用程序 在命令的描述中,它表示: memdump从所有服务器转储一个“密钥”列表,让它从中获取。因为memcached不能保证提供所有密钥,所以不可能获得完整的“转储” 在另一个网站()上,我读到: […]memcache协议提供了一些命令,用于查看由平板组织的数据(给定大小范围的数据类别)。但也存在一些重大限制: 每个楼板类只能转储关键帧(内容大小大致相同的关键帧) 每个sl

出于调试目的,我想计算memcache服务器中的密钥数,因此我做了一些研究,最后使用了libmemcached附带的实用程序

在命令的描述中,它表示:

memdump从所有服务器转储一个“密钥”列表,让它从中获取。因为memcached不能保证提供所有密钥,所以不可能获得完整的“转储”

在另一个网站()上,我读到:

[…]memcache协议提供了一些命令,用于查看由平板组织的数据(给定大小范围的数据类别)。但也存在一些重大限制:

  • 每个楼板类只能转储关键帧(内容大小大致相同的关键帧)

  • 每个slab类只能转储一页(1MB数据)

  • 这是一个非官方功能,可能随时被删除

  • [……]

    那么
    在实践中,每个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;
        // ...
        }