使用连接池访问memcached(libmemcached)的完整例子

使用连接池访问memcached(libmemcached)的完整例子
摘要由CSDN通过智能技术生成


#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/lib/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
//不支持 gcc 静态链接方式,因为 pool 实现是 C++ 实现
//gcc -m32 -g memcached_test.c -o memcached_test -I/usr/lib/libmemcached/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

//从连接池内取出一个连接集群对象,支持错误码和超时功能
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);
}

//从连接池内取出一个连接集群对象,无空闲对象直接返回
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, &rc);
}

//释放一个从连接池内取出的一个连接集群对象
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));
    }
}

//例子程序,通过配置构造一个连接池的种子,构造的对象是一个cache集群
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));
}


//例子程序,通过服务列表构造一个连接池的种子,构造的对象是一个cache集群
memcached_st * create_memcached_seed_by_srv_list()
{
    const char *hosts[] = { "169.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 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值