`
sofire
  • 浏览: 147032 次
  • 性别: 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
分享到:
评论

相关推荐

    memcached源代码分析

    Memcached是一个高效、开源、分布式的内存对象缓存系统,旨在通过减轻数据库负担,加速动态Web应用程序的响应速度。它通过在内存中存储键值对的形式缓存数据,减少数据库的查询次数,从而提升动态、数据库驱动型网站...

    memcached_functions_mysql

    **标题解析:** "memcached_...通过学习和应用"memcached_functions_mysql",开发者能够更有效地在PHP应用中整合Memcached和MySQL,提高系统的可伸缩性和响应速度。同时,这也有助于理解和掌握Web应用的性能优化策略。

    易语言源码易语言Memcached协议客户端模块源码.rar

    通过对这个源码的深入学习,开发者不仅可以了解如何使用易语言实现网络通信,还可以掌握Memcached协议的细节以及分布式缓存系统的基本工作流程。这对于提升易语言应用的性能和扩展性具有重要意义。同时,源码分析也...

    memcached 资源包大全 php

    这个扩展提供了丰富的函数接口,如`memcached_add()`, `memcached_get()`, `memcached_set()`等,用于存储和检索数据。 2. **安装过程**: 在PHP 5.3.10环境下安装memcached扩展,通常需要以下步骤: - 安装...

    memcached-笔记资料.rar

    标题 "memcached-笔记资料.rar" 暗示了这个压缩包包含的是关于 memcached 的学习资料,这是一款广泛使用的分布式内存对象缓存系统。它主要用于减轻数据库的负载,通过在内存中存储常用数据,提高应用程序的响应速度...

    Wamp Server 2.5 + memcached扩展

    3. 安装 memcached 服务,通常通过下载 memcached 安装程序并在命令行中运行进行安装。 4. 下载并解压 PHP memcached 扩展,将 php_memcached.dll 复制到 PHP 的 ext 目录下。 5. 修改 php.ini 文件,在适当位置添加...

    Memcached相关资料

    Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式计算环境中缓解数据库负载,提高应用程序的性能。它通过将数据存储在内存中,快速响应来自客户端的请求,从而减少了对数据库的直接访问。以下是关于...

    .NET分布式缓存Memcached从入门到实战源码下载

    .NET分布式缓存是提高应用程序性能的关键技术之一,它通过在多台服务器之间共享内存来存储数据,从而减少了数据库的访问压力。Memcached是一款轻量级、高性能的分布式内存对象缓存系统,广泛应用于Web应用中。本文将...

    Memcached深度分析

    Memcached作为典型的网络服务程序,启动时可以以守护进程方式运行。其核心功能包括键值对存储、内存管理、一致性哈希等。源代码中的`daemon.c`文件包含创建守护进程的功能,通过简单的`daemon`函数实现进程的后台...

    memcached源码欣赏

    memcached是一款开源的、高性能的分布式内存对象缓存系统,它被广泛用于提高网站和应用程序的数据访问速度。由于其简洁的C语言实现,使得memcached的源码成为学习缓存机制和分布式系统设计的宝贵资料。 在源码中,...

    memcached-java_2.8,客户端,源代码,chm_api

    例如,`MemcachedClient`类的构造函数接收`ServerLocator`和`Transcoder`参数,前者用于确定服务器的连接策略,后者则负责数据的编码和解码。通过查阅API文档,开发者可以了解如何自定义这些组件以满足特定需求。 ...

    Python-强大的memcached客户端拥有shdict缓存层和许多其他功能

    学习和使用这样的Python memcached客户端库,不仅需要掌握Python语言和memcached的基本概念,还需要理解缓存系统的设计原则,以及如何通过编程技巧来优化性能。对于大型Web应用而言,合理地使用缓存是提高响应速度、...

    C语言memcache代码

    2. **设置键值对**:使用`memcached_set()`或`memcached_setByKey()`函数设置键值对。它们接受键、值、过期时间、和长度等参数。 ```c const char *key = "myKey"; const char *value = "myValue"; size_t key_...

    PHP程序设计思维导图.rar

    - **缓存技术**:如APC、Memcached、Redis等,提高数据读取速度。 - **代码优化**:避免不必要的数据库查询,减少内存占用,使用高效的算法。 通过理解并熟练运用这个"PHP程序设计思维导图.png",你将能够系统地...

    memcached-binary:使用二进制协议构建状态内存缓存客户端

    **标题解析:** “memcached-binary:使用二进制协议构建状态内存缓存...8. **社区支持**:开源项目通常会有社区支持,包括文档、示例代码、问题解答和可能的贡献者,这对于学习和使用`memcached-binary`会非常有帮助。

    小程序后台数据交互DEMO(源码)

    - 响应数据在小程序端通过回调函数处理,更新界面或执行其他操作。 4. **安全性**: - 数据传输安全:前后端交互应使用HTTPS协议,确保数据在传输过程中的加密安全性。 - 授权验证:小程序通常采用OAuth 2.0进行...

Global site tag (gtag.js) - Google Analytics