2012-06-01 4 views
2

так что я получил вопрос очень, связанный с: question with memcached_get() in libmemcachedиспользование memcached_get() в libmemcached без value_length

это не кажется очевидным, или возможно мне из документации. возможно ли получить значение на основе ключа, не зная длины данных? Я планирую иметь несколько потоков, изменяющих значение ключей, и поэтому не может сохранить предыдущую длину значения. Я попытался установить * value_length в NULL, 0 или произвольное большое число без эффекта (например, сбой программы). Я надеялся, что это может быть достигнуто с помощью строк с нулевым завершением, но он не знает внутренних компонентов 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 (ключ), и он возвращает вам указатель (ответ) на объект, который он соединяет с вашим ключом. Это хранилище malloc() s для размещения объекта и дает размер этого объекта через return_value_length, адрес которого вы передали memcached как & return_value_len.

 Смежные вопросы

  • Нет связанных вопросов^_^