免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1085 | 回复: 0
打印 上一主题 下一主题

[C++] 功能强大的 C++ redis 客户端库增加至 acl 项目中 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-09 14:52 |只看该作者 |倒序浏览

     虽然 redis 开发库已有不少,但 C/C++ 的客户端库好用的并不多,虽然官方也提供了 C 版的客户端库,但易用性较差,而且不支持连接池功能,相对于 C/C++ 的库,JAVA 版的 jedis 要好用的多,jedis 提供了 redis 库的全命令实现,而 C/C++ 则只提供了协议级实现,使用者需要了解命令发送的格式,而且还得判断分析所接收数据的格式,使用起来非常繁琐,acl 库(跨平台网络通信与服务器框架)的作者在使用 C/C++ 版的 redis 库时也屡受摧残,于是其基于 acl 的基础库完整实现了 redis 的所有命令,该库对应于 redis 客户端命令的总共 12 个大类,150多个命令,同时为了使用方便,有的命令会因参数的变化提供多个函数方法,所以在 acl 的 redis 库中的 12 个类中,有 400 多个方法;另外,该 redis 库还提供了丰富的连接池及连接池集群管理功能,便于使用者编写高性能、高并发的应用服务。

     在 acl 的 redis 库中总共有 7000+ 行源代码,2000+ 行头文件,同时每个类方法都提供了详细的中文注释;为了保证该库的健壮性,作者提供了大量的测试用例(光测试用例源码就达 5000+ 行。

     在 acl 的 redis 库的内部实现中,为了保证处理效率,在每一个命令处理过程中都会绑定一个内存分配器,大大减少了内存的分配/释放次数,非常适合于多线程运行环境。

     下面是一个使用 REDIS HMSET 客户端命令的简单例子:

       
static acl::string __keypre("hash_test_key");

static bool test_hmset(acl::redis_hash& option, int n)
{
        acl::string key, attr1, attr2, attr3;
        acl::string val1, val2, val3;
        std::map<acl::string, acl::string> attrs;

        for (int i = 0; i < n; i++)
        {
                key.format("%s_%d", __keypre.c_str(), i);
                attr1.format("attr1");
                attr2.format("attr2");
                attr3.format("attr3");
                val1.format("val1_%s", attr1.c_str());
                val2.format("val2_%s", attr2.c_str());
                val3.format("val3_%s", attr3.c_str());
                attrs[attr1] = val1;
                attrs[attr2] = val2;
                attrs[attr3] = val3;

                option.reset();
                if (option.hmset(key.c_str(), attrs) == false)
                {
                        printf("hmset error, key: %s\r\n", key.c_str());
                        return false;
                }
                else if (i < 10)
                {
                       printf("hmset ok, key: %s, %s=%s, %s=%s, %s=%s\r\n",
                        key.c_str(), attr1.c_str(), val1.c_str(),
                        attr2.c_str(), val2.c_str(),
                        attr3.c_str(), val3.c_str());
                }
                attrs.clear();
        }

        return true;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP