2

所以我得到了一个非常相关的问题:libmemcached 中的 memcached_get() 问题

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

 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

4

2 回答 2

1

好的,多亏了了不起的 [/sarcasm] 文档,或者我在 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);
于 2012-06-01T10:13:21.543 回答
0

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

于 2014-04-01T20:16:45.587 回答