Libmemcached supports connection pooling access memcached

Source: Internet
Author: User
Tags assert connection pooling


#include <stdio.h> #include <libmemcached/memcached.h> #include <libmemcached/util.h> #include < assert.h>//g++-m32-g Memcached_test.c-o memcached_test-i/usr/lib/libmemcached/include-l/usr/lib/libmemcached/ lib-lmemcached-lmemcachedutil//g++-m32-g Memcached_test.c-o memcached_test-i/usr/lib/libmemcached/include/usr/li B/libmemcached/lib/libmemcached.a/usr/lib/libmemcached/lib/libmemcachedutil.a//gcc-m32-std=gnu99-g Memcached_ Test.c-o memcached_test-i/usr/lib/libmemcached/include-l/usr/lib/libmemcached/lib/-lmemcached-lmemcached/lib/ libmemcachedutil//does not support gcc static chaining because the pool implementation is a C + + implementation//gcc-m32-g Memcached_test.c-o Memcached_test-i/usr/lib/libmemcache d/include/usr/lib/libmemcached/lib/libmemcached.a/usr/lib/libmemcached/lib/libmemcachedutil.a///usr/local/ Memcached-1.4.20/bin/memcached-d-M 10-u root-l 169.254.10.12-p 12111///usr/local/memcached-1.4.20/bin/memcached-d- M 10-root-l 169.254.10.12-p 12112///usr/local/memcached-1.4.20/bin/memcached-d-M 10-root-l 169.254.10.12-p 12113//http://libmemcached.org/libmemcached.html//Remove a connection cluster object from the connection pool,    Support error code and timeout function Memcached_st * fetch_memcached_wait (Memcached_pool_st * pool, struct timespec* wait, memcached_return_t *RC) {    ASSERT (Pool | | wait | | rc); Return Memcached_pool_fetch (pool, wait, RC);}    Remove a connected Cluster object from the connection pool, no idle object directly returns Memcached_st * fetch_memcached (Memcached_pool_st * pool) {assert (pool);    static struct Timespec wait = {0, 0};    Static memcached_return_t RC; Return fetch_memcached_wait (Pool, &wait, &AMP;RC);}    Release a connection cluster object removed from the connection pool void release_memcached (Memcached_pool_st * pool, Memcached_st *memc) {assert (Pool | | memc);    memcached_return_t rc = Memcached_pool_push (pool, MEMC);    if (memcached_success! = RC) {//printf ("%s/n", Memcached_strerror (0, RC)); The}}//example program, which constructs a seed for a connection pool by configuration, constructs an object that is a cache cluster Memcached_st * CREATE_MEMCACHED_SEED_BY_CONFIG () {const char *config_string = "--server=169.254.10.12:12111/?1--server=169.254.10.12:12112/?2--server=169.254.10.12:12113--connect-timeout=10 ";    memcached_return_t RC;    Char errmsg[255] = {0};    rc = Libmemcached_check_configuration (config_string, strlen (config_string), errmsg, sizeof (errmsg));    Memcached_st *st = 0;        if (memcached_success! = RC) {printf ("Check_configuration fail,%s.%s/n", ErrMsg, config_string);    Return St; } Return st = memcached (config_string, strlen (config_string));} Example program, the seed of a connection pool constructed from a list of services, the object being constructed is a cache cluster Memcached_st * Create_memcached_seed_by_srv_list () {const char *hosts[] = {"16    9.254.10.12 "," 169.254.10.12 "," 169.254.10.12 "};    size_t port[] = {12111, 12112, 12113};    size_t weight[] = {1, 2, 1};    Memcached_server_list_st list = 0;    bool result = true;    size_t total = sizeof (weight)/sizeof (size_t);        for (size_t i = 0; i < total; ++i) {memcached_return_t rc;        List = Memcached_server_list_append_with_weight (list, hosts[i], port[i], weight[i], &AMP;RC); if (memcached_SUCCESS! = RC) {printf ("Server_list_append_with_weight fail,%s/n", memcached_strerror (0, RC));            result = false;        Break    }} Memcached_st *st = 0;        if (result) {st = memcached_create (0);        Memcached_server_push (St, list);    printf ("memcached_server_list_count:%u/n", Memcached_server_list_count (list));    } if (list) {memcached_server_list_free (list); } return St;} Example program that constructs a pool of seeds directly through a service, constructs an object that is a cache cluster Memcached_st * CREATE_MEMCACHED_SEED_BY_HOST () {const char *hosts[] = {"169.25    4.10.12 "," 169.254.10.12 "," 169.254.10.12 "};    size_t port[] = {12111, 12112, 12113};    size_t weight[] = {1, 2, 1};    bool result = true;    size_t total = sizeof (weight)/sizeof (size_t);    Memcached_st *st = memcached_create (0);    ASSERT (ST);        for (size_t i = 0; i < total; ++i) {memcached_return_t rc;        rc = Memcached_server_add_with_weight (St, Hosts[i], port[i], weight[i]);if (memcached_success! = RC) {printf ("Server_add_with_weight fail,%s/n", memcached_strerror (0, RC));            result = false;        Break        }} if (!result) {memcached_free (ST);    st = 0;    } else {printf ("memcached_server_count,%u/n", Memcached_server_count (ST)); } return St;}    Example program that gets the configuration of a cache cluster void Get_memcached_config (Memcached_st *st) {assert (ST);    uint64_t result = Memcached_behavior_get (St, memcached_behavior_remove_failed_servers);    printf ("memcached_behavior_remove_failed_servers,%llu/n", result);    result = Memcached_behavior_get (St, memcached_behavior_snd_timeout);    printf ("memcached_behavior_snd_timeout,%llu/n", result);    result = Memcached_behavior_get (St, Memcached_behavior_no_block);    printf ("Memcached_behavior_no_block,%lld/n", result);    result = Memcached_behavior_get (St, memcached_behavior_buffer_requests);    printf ("memcached_behavior_buffer_requests,%llu/n", result); ResUlt = Memcached_behavior_get (St, memcached_behavior_connect_timeout);    printf ("memcached_behavior_connect_timeout,%llu/n", result);    result = Memcached_behavior_get (St, Memcached_behavior_server_failure_limit); printf ("memcached_behavior_server_failure_limit,%llu/n", result);}    Example program, setting the configuration of a cache cluster void Set_memcached_config (Memcached_st *st) {assert (ST);    memcached_return_t RC;    rc = Memcached_behavior_set (St, Memcached_behavior_no_block, 1);    if (memcached_success! = RC) {printf ("Set Memcached_behavior_no_block fail,%s/n", Memcached_strerror (St, RC));    rc = Memcached_behavior_set (St, memcached_behavior_rcv_timeout, 1000 * 1000 * 3); if (memcached_success! = RC) {printf ("Set Memcached_behavior_rcv_timeout fail,%s/n", Memcached_strerror (St, RC)    );    }}//Example Program, get the configuration of a cluster pool void Get_memcached_pool_config (Memcached_pool_st *pool) {assert (pool);    uint64_t result = 0;    memcached_return_t RC; rc = Memcached_pool_behavior_get (pool, memcached_Behavior_no_block, &result);    printf ("Memcached_behavior_no_block,%llu/n", result);    rc = Memcached_pool_behavior_get (pool, memcached_behavior_buffer_requests, &result);    printf ("memcached_behavior_buffer_requests,%llu/n", result);    rc = Memcached_pool_behavior_get (pool, memcached_behavior_connect_timeout, &result);    printf ("memcached_behavior_connect_timeout,%llu/n", result);    rc = Memcached_pool_behavior_get (pool, memcached_behavior_server_failure_limit, &result);    printf ("memcached_behavior_server_failure_limit,%llu/n", result);    rc = Memcached_pool_behavior_get (pool, memcached_behavior_snd_timeout, &result);    printf ("memcached_behavior_snd_timeout,%llu/n", result);    rc = Memcached_pool_behavior_get (pool, memcached_behavior_rcv_timeout, &result);    printf ("memcached_behavior_rcv_timeout,%llu/n", result);    rc = Memcached_pool_behavior_get (pool, memcached_behavior_remove_failed_servers, &result); printf ("Memcached_behavior_remove_failed_servers,%llu/n ", result);}    Example program, set the configuration of a cluster pool bool Set_memcached_pool_config (Memcached_pool_st *pool) {assert (pool);    memcached_return_t RC;    rc = Memcached_pool_behavior_set (pool, memcached_behavior_snd_timeout, 1000 * 1000 * 3);    if (memcached_success! = RC) {printf ("Memcached_behavior_snd_timeout fail,%s/n", memcached_strerror (0, RC));    rc = Memcached_pool_behavior_set (pool, memcached_behavior_rcv_timeout, 1000 * 1000 * 4);    if (memcached_success! = RC) {printf ("Memcached_behavior_rcv_timeout fail,%s/n", memcached_strerror (0, RC));    rc = Memcached_pool_behavior_set (pool, memcached_behavior_remove_failed_servers, 3); if (memcached_success! = RC) {printf ("Memcached_behavior_remove_failed_servers fail,%s/n", Memcached_strerror (0    , RC)); }}//Example program, get the value of multiple keys at once void mget_memcached (Memcached_st *st, const char *keys[], size_t key_length[], size_t key_count) {A    Ssert (St | | keys | | key_length > 0 | | key_count > 0); Uint32_t count = 0, flags = 0;    Char Return_key[memcached_max_key] = {0};    size_t Return_key_length;    char *return_value = 0;    size_t Return_value_length;    memcached_return_t rc = Memcached_mget (st, Keys, Key_length, Key_count); while (Return_value = Memcached_fetch (St, Return_key, &return_key_length, &        Amp;return_value_length, &flags, &AMP;RC)) {count++;        printf ("key=%s,keylength=%u,value=%s,total=%u/n", Return_key, Return_key_length, Return_value, Count);        Free (return_value);    memset (return_key, 0, sizeof (return_key));  }}//Example program, once get the value of specifying a key void Get_memcached_by_key (Memcached_st *st, const char *key, size_t key_length) {assert (St | | key ||    Key_length > 0);    uint32_t flags = 0, value_length = 0;    memcached_return_t RC;    Char *value = memcached_get (St, Key, Key_length, &value_length, &flags, &AMP;RC); if (memcached_success! = RC) {printf ("%s/n", memcacheD_strerror (St, RC));        } else {printf ("key=%s,key_length=%u,value=%s,value_length=%u/n", Key, Key_length, value, value_length);    Free (value);    }}//complete test program int main (int argc, char *argv{printf ("memcached_lib_version:%s/n", Memcached_lib_version ());    Get a cluster seed, three methods the purpose and function are the same, optionally a memcached_st * MEMC = Create_memcached_seed_by_host ();    Memcached_st * MEMC = Create_memcached_seed_by_srv_list ();    Memcached_st * MEMC = Create_memcached_seed_by_config ();    ASSERT (MEMC);    Set the cluster seed properties Set_memcached_config (MEMC);    Get_memcached_config (MEMC);    printf ("----------/n");    Create cluster pool, release cluster pool, automatically free all resources (including seed) const uint32_t INITIAL = 1, MAX = 4;    Memcached_pool_st *pool = memcached_pool_create (MEMC, INITIAL, MAX);    ASSERT (pool);    Sets the cluster seed's attribute set_memcached_pool_config (pool);    Get_memcached_pool_config (pool);    printf ("----------/n");    Remove a cluster Access object from the cluster pool struct Timespec spec = {3, 0};    memcached_return_t RC; MEMC = Fetch_memcached_wait (POol, &spec, &AMP;RC);        if (memcached_success! = RC) {printf ("fetch_memcached fail,%s/n", memcached_strerror (0, RC));        Memcached_pool_destroy (pool);    return 0;    } const char *keys[] = {"P", "1", "2", "3", "A", "#", "^", "*", "&", ",", "?"};    size_t key_length[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; const char *values[] = {"11111", "222b2", "33333", "AAAA", "PPO1", "oo#", "^WW", "* * *", "&&&", ",,,", "?????    " };    size_t i = 0, total = sizeof (keys)/sizeof (char *); while (MEMC && total > i) {//Set multiple values, scatter stored in multiple services rc = Memcached_set (MEMC, Keys[i], strlen (keys[i        ]), Values[i], strlen (values[i]), 0, 0);        if (memcached_success! = RC) {printf ("%s,%d/n", Memcached_strerror (MEMC, RC), i);    } i++;    } if (MEMC) {//frees the removed cluster Access object release_memcached (pool, MEMC);    }//No blocking, take out an Access object MEMC = fetch_memcached (pool); Use different ways to access Object mget_memcached (MEMC,Keys, key_length, sizeof (keys)/sizeof (char *));    printf ("----------/n");    Mget_memcached (Memc,keys, key_length, sizeof (keys)/sizeof (char *));    Get_memcached_by_key (MEMC, keys[10], strlen (keys[10]));    Get_memcached_by_key (MEMC, keys[4], strlen (keys[4]));    Get_memcached_by_key (MEMC, keys[3], strlen (keys[3]));    if (MEMC) {//frees the removed cluster Access object release_memcached (pool, MEMC);    }//cluster pool release, automatic release of all resources (including seed) Memcached_pool_destroy (pool);    memcached_return_t rc = Memcached_notfound;    printf ("aa=%s/n", Memcached_strerror (0, RC));    printf ("over./n"); return 0;}


Libmemcached supports connection pooling access memcached

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.