功能强大的 C++ redis 客户端库增加至 acl 项目中

虽然 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;
}

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-09-04 10:14:11

功能强大的 C++ redis 客户端库增加至 acl 项目中的相关文章

环信EaseUI库怎么集成到项目中?

问题描述 我想把环信最新的EaseUI3.0库集成到项目中,只用到了聊天界面,求详细文档教程 解决方案 可以看下这里  http://docs.easemob.com/doku.p ... guide

Web上功能强大的DbGrid表格HTC组件[只需在Table中指定样式就可以完成多种功能可扩展]_htc

Grid.htm 复制代码 代码如下: <style> INPUT { DefineINPUTOnClick:expression(this.onclick=function(){if(this.type=="button"){this.style.color=chooseColor();}}); } </style> <script> var iGridRowCount=0; var iGridColCount=0; function create

acl 框架中的 Redis 库已经支持集群版 Redis 3.0

据 redis 官方网站显示,支持集群版的 redis3.0 快要发布了(现在已经到了redis3.0 rc4 版本),这样使用者就不需要自己花很大力气来针对 redis 进行分库了,之前人们为了使单机版的 redis 能支持集群方式,往往是在客户端或通过加一个中间的代理层(比如使用 tweaproxy)做很多工作,现在有了集群版的 redis3.0 ,这些额外的操作都不再需要. 为了能够支持集群版的 redis 服务,另外增加了两个主要的重定向指令需要客户端能够支持:MOVE, ASK.其中以

Java web项目中关于如何使用redis的一些问题

问题描述 这两天应项目需求,了解了一下redis的一些相关内容.有个疑问想请教一下.因为看了好多例子,都是先在本地将redis服务启动后,然后在项目中连接使用redis.那么问题来了,就是我要在项目中使用redis,是不是一定要先在本地启动redis服务,然后才能在项目中使用呢?能不能像tomcat一样在eclipse中配置相关文件,然后在eclipse中启动呢?如果可以,应该怎样配置呢?谢谢. 解决方案 eclipse集成了tomcat支持,其实主要是为了 能够快捷地将当前编写的项目发布到to

使用AJAX优化客户端:Iconix Pharmaceuticals使用AJAX和J2EE创建功能强大的瘦客户端的实践

ajax|j2ee|创建|客户端|优化     创建于1998年的Iconix Pharmaceuticals公司从事科研和工业方面的软件开发.该公司是chemogenomics方面的先驱,chemogenomics是一门学科,这门学科使用化学和基因学的方法,在堆积如山的数据中深入研究,而这些数据对于开发新药并推向市场来说是必须的.     对于公司来说,一个主要的挑战是:产生一种新药或者提供制药工业所需要的信息需要将分散的.不同的数据库的数据集成起来,并且来分析它们,最后得到引人注目的结果.大

AJAX和J2EE创建功能强大的瘦客户端

ajax|j2ee|创建|客户端 创建于1998年的Iconix Pharmaceuticals公司从事科研和工业方面的软件开发.该公司是chemogenomics方面的先驱,chemogenomics是一门学科,这门学科使用化学和基因学的方法,在堆积如山的数据中深入研究,而这些数据对于开发新药并推向市场来说是必须的. 对于公司来说,一个主要的挑战是:产生一种新药或者提供制药工业所需要的信息需要将分散的.不同的数据库的数据集成起来,并且来分析它们,最后得到引人注目的结果.大多数的研究者都同意:当

使用AJAX和J2EE创建功能强大的瘦客户端

ajax|j2ee|创建|客户端 创建于1998年的Iconix Pharmaceuticals公司从事科研和工业方面的软件开发.该公司是chemogenomics方面的先驱,chemogenomics是一门学科,这门学科使用化学和基因学的方法,在堆积如山的数据中深入研究,而这些数据对于开发新药并推向市场来说是必须的. 对于公司来说,一个主要的挑战是:产生一种新药或者提供制药工业所需要的信息需要将分散的.不同的数据库的数据集成起来,并且来分析它们,最后得到引人注目的结果.大多数的研究者都同意:当

Serv-U :快速构建功能强大的FTP 服务器

Serv-U :快速构建功能强大的FTP 服务器 Internet 的迅速发展为人们提供的前所未有的信息资源,越来越多的人希望在享受Internet 带来的全新的体验的时候,能够拥有自己的网上家园.在当今流行的Internet 应用中,要数WWW 和 FTP 文件传输最为普及了.本文将结合Serv-U 这一功能强大,界面友好,易学易用的FTP 服务器端软件,详细的介绍如何在最短的时间内建立起一个完备的FTP 服务器.除了具体的安装和配置说明外,文中还将涉及一些使用FTP 所必须了解的相关知识,希

【Alljoyn】 Alljoyn学习笔记七 Alljoyn瘦客户端库介绍

Alljoyn瘦客户端库介绍(上)   1.简介 本文档对AllJoynTM瘦客户端的核心库文件(AJTCL)进行了详尽的介绍.本文档介绍了系统整体架构,AllJoyn框架结构,并着重于介绍如何将嵌入式设备加入AllJoyn系统整体架构中.1.1目的 本文档介绍了如何使一个受限于功耗.计算能力和内存的设备(嵌入式设备)加入AllJoyn分布式系统.具体而言,本文档包括了对AllJoyn面向嵌入式系统的方面的介绍,并着重描述了基于AllJoyn的系统的各个组件是如何与嵌入式设备协作以构建一个基于接