`
sofire
  • 浏览: 143971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

memcached函数的学习程序

阅读更多
尝试把 libmemcached的示例程序改成D语言的。
源程序 和示例程序可以从 这里下载:
http://people.freebsd.org/~seanc/libmemcache/
也可以从附件下载

本程序使用了bcd程序来转换c语言的头文件。
转换后的memcache.h为 bcd.libmemcache.memcache
有几个函数和类型没有转换(?),手动添加进去的。

编译方法为:
先把libmemcache装上,默认装到/usr/local下
然后用:
dmd memcached.d /usr/local/lib/libmemcache.a

PS:libmemcache的错误捕捉方法,见 libmemcache包中的test目录下的相关程序
该lib包的文档不多,多阅读test下的示例代码吧。
源程序看起来比较痛苦。

/**
 * Memcached的应用程序
 * Edit by Liu Dehong @ 2007/08/09
 * Version:
 *  1.0.0
 */

import std.stdio;
import std.c.stdlib;
import std.string;
import std.socket;
import bcd.libmemcache.memcache;

void main()
{
    /* Create a new memcache instance */
    memcache *mc = mc_new();

    /* Add a few servers */
    mc_server_add(mc, "127.0.0.1", "11211");
    mc_server_add(mc, "127.0.0.1", "11212");
    mc_server_add4(mc, "127.0.0.1:11213");

    char[] key = "key";
    char[] val = "100";
    int expire = 100;
    int flags  = 0;

    /* Add a key */
    mc_add(mc, toStringz(key), key.length, toStringz(val), val.length, expire, flags);

    /* Get a key, caller has to free(3) memory */
    void *blah = mc_aget(mc, toStringz(key), key.length);
    printf("%s"\n, blah);
    auto myval = toString(cast(char*)blah).dup;
    writefln("%s", myval);
    free(blah);

    char[] key1 = "key1";
    char[] key2 = "key2";
    /* Perform a multi-key request */
    memcache_req *req = mc_req_new();
    mc_req_add(req, toStringz(key1), key1.length);
    mc_req_add(req, toStringz(key2), key2.length);
    mc_get(mc, req);
    /* Process the results (need a better interface to looping through results) */

    /* Perform a multi-key request the easy way (this is my preferred way of getting data): */
    req = mc_req_new();
    auto res1 = mc_req_add(req, toStringz(key1), key1.length);
    auto res2 = mc_req_add(req, toStringz(key2), key2.length);
    mc_get(mc, req);
    /* Play with res1/res2 w/o any looping through req */


    /* Complex multi-key get example: */
    /* Grab the response object that will be used to store a given key */
    char[] key3 = "key3";
    memcache_res *res = mc_req_add(req, toStringz(key3), key3.length);
    res.size = 1024;               /* Allocate our own memory a head of time (useful for loops) */
    res.val = malloc(res.size);
    mc_res_free_on_delete(res, 1);

    /* Perform the get */
    mc_get(mc, req);
    mc_res_free(req, res);

    /* Get stats from the whole cluster */
    memcache_server_stats *s = mc_stats(mc);
    mc_server_stats_free(s);

    /* Storage commands: */
    mc_add(mc, toStringz(key), key.length, toStringz(val), val.length, expire, flags);
    mc_replace(mc, toStringz(key), key.length, toStringz(val), val.length, expire, flags);
    //mc_replace(mc, key, key_len, val, bytes, expire, flags);
    mc_set(mc, toStringz(key), key.length, toStringz(val), val.length, expire, flags);

    int hold_timer = 0;
    /* Delete commands: */
    mc_delete(mc, toStringz(key), key.length, hold_timer);

    /* Atomic opts: */
    mc_incr(mc, toStringz(key), key.length, 10);
    mc_decr(mc, toStringz(key), key.length, 5);

    printf("%s"\n, mc_aget(mc, toStringz(key), key.length));

    mc_free(mc);
}


  • D_memcached.zip (301.3 KB)
  • 描述: 包括:D语言的程序,lib包,和转换后的头文件
  • 下载次数: 23
分享到:
评论

相关推荐

    php课程(共100多节)

    77:Zend framework数据库操作之编辑和视图函数 78:PHP+Flash多文件异步上传 swfupload 79:PHP上传RAR压缩包并解压目录 80:ADODB PHP 数据库万能引擎类(上) 81:ADODB PHP 数据库万能引擎类(下) 82:PHP开发...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程7:PHP函数和自定义函数 PHP100视频教程8:Mysql 简介和创建新的数据库 PHP100视频教程9:数据库中的常用SQL语句 PHP100视频教程10:MYSQL在PHP5中的应用 PHP100视频教程11:学习制作PHP+MYSQL...

    JAVA上百实例源码以及开源项目源代码

    1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实世界模型  基于EJB的真实世界...

    JAVA上百实例源码以及开源项目

    1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实世界模型  基于EJB的真实世界...

    亮剑.NET深入体验与实战精要2

    15.4.9 Memcached——分布式缓存系统 560 15.4.10 Cacheman——.NET架构 下的分布式缓存项目 561 15.5 数据库访问性能优化 562 15.5.1 选择合适的.NET数据供应器 563 15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪...

    亮剑.NET深入体验与实战精要3

    15.4.9 Memcached——分布式缓存系统 560 15.4.10 Cacheman——.NET架构 下的分布式缓存项目 561 15.5 数据库访问性能优化 562 15.5.1 选择合适的.NET数据供应器 563 15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪...

Global site tag (gtag.js) - Google Analytics