2012-06-01 22 views
2

,所以我有一个问题有很大关系:question with memcached_get() in libmemcached使用memcached_get()在libmemcached没有value_length

它似乎并不明显,或者可以从我的文档。是否有可能在不知道数据长度的情况下获取基于密钥的值?我计划让多个线程更改键的值,因此不能保存前一个值的长度。我试着将* value_length设置为NULL,0或者没有任何效果的任意高数字(例如程序崩溃)。我希望这可以通过以null结尾的字符串来实现,但它不知道libmemcached的内部结构。任何建议,指针?日Thnx。

char *memcached_get (memcached_st *ptr, 
       const char *key, size_t key_length, 
       size_t *value_length, 
       uint32_t *flags, 
       memcached_return *error); 

一些更好文档:http://dev.mysql.com/doc/refman/5.1/en/ha-memcached-interfaces-libmemcached.html#ha-memcached-interfaces-libmemcached-get

回答

1

确定,这要归功于C++了不起[/讽刺]文档或者也许我的经验不足,出现了关于memcached_get功能的误解。根据

http://docs.oracle.com/cd/E17952_01/refman-5.0-en/ha-memcached-interfaces-libmemcached.html#ha-memcached-interfaces-libmemcached-get

该函数使用的size_t * value_length到商店返回值的大小。所以写你的功能是这样的:

memcached_st *memc; 
    memcached_return rc; 
    memcached_return error; 
    memc= memcached_create(NULL); 
    servers= memcached_server_list_append(servers, "localhost", 11211, &rc); 
    rc= memcached_server_push(memc, servers); 
    uint32_t flags; 
    size_t return_value_length; 
    const char *key = "123"; 

const char *response = memcached_get(memc, 
       key, strlen (key), 
       &return_value_length, 
       &flags, 
       &error); 
0

Memcached是一个键值机器。你给它一个strlen(key)的键,然后它返回一个指针(响应)给它与你的键配对的对象。它用malloc()的存储来放入对象,并通过return_value_length给你对象的大小,你的地址传递给memcached为& return_value_len。