您的位置:

hiredis——高性能redis客户端

一、简介

hiredis是一个轻量级的C语言库,简单易用,专注于Redis。

hiredis支持高性能的异步操作和管道操作,以及简单的同步操作。除此之外,它还支持连接复用、重连机制等功能。

hiredis可在Windows、Linux、Unix等平台运行,并通过API进行更加灵活高效的开发。

二、安装

hiredis的安装十分简便,在官方下载页面直接下载对应版本library即可。安装完成之后,在连接Redis使用时只需要在头部文件中include即可。

具体代码段如下:

#include 

  

同时,在连接redis时,需要指定redis主机IP地址和端口号,具体代码如下:

redisContext *c = redisConnect("127.0.0.1", 6379);
if (c == NULL || c->err) {
    if (c) {
        printf("Connection error: %s\n", c->errstr);
        redisFree(c);
    } else {
        printf("Connection error: can't allocate redis context\n");
    }
    return NULL;
}

三、基本操作

对于基本操作,包括增删改查,hiredis提供了丰富多样的API函数,开发人员可根据不同需求自由选择。在本部分,我们以初学者常用的基本操作——set和get为例进行讲解。

3.1 set操作

set操作是一种简单的给Redis设置键值的操作,具体代码如下:

redisReply *reply = (redisReply*)redisCommand(c,"SET %s %s", key, value);
freeReplyObject(reply);

set操作包括设置键值对的值,对已有值的键进行覆盖。同时还可设置过期时间和NX/XX选项。

3.2 get操作

get操作是一种简单的获取Redis键值对的操作,具体代码如下:

redisReply *reply = (redisReply*)redisCommand(c,"GET %s", key);
if(reply->str != NULL) {
    printf("get value:%s\n", reply->str);
    freeReplyObject(reply);
    return 1;
}

get操作返回Redis键值对的值,如果键不存在则返回NULL。

四、高级操作

在实际的Redis使用过程中,不仅仅是基本的操作,比如排序、批量操作等都是开发者常常接触的高级操作。hiredis也提供了丰富多样的API函数对这些操作进行支持。

4.1 排序

排序是对存储在Redis的字符串或列表的集合进行排列的操作。

排序函数使用的是SORT命令,函数原型如下:

redisReply* redisSortCommand(redisContext* c, const char *key,
                              const char *by_pattern, const char *get_pattern,
                              int offset, int count, int order);

其中,key参数指定要进行排序的键名,by_pattern指定作为被排序数据的权重,get_pattern则指定要返回的数据集合,offset和count决定要返回的排序结果集合,order是指定排列顺序,取值可以是ASC或DESC。

具体代码如下:

//排序
redisReply* r = redisSortCommand(c, "sortkey", "weight_*", "#", 0, -1, 0);
if (r->type == REDIS_REPLY_ARRAY)
{
    for (unsigned int j = 0; j < r->elements; j ++)
        printf("%u) %s\n", j, r->element[j]->str);
    freeReplyObject(r);
}

4.2 批量操作

批量操作是指一次性对多个键进行操作,这样做能够提高效率。

操作函数使用的是管道技术,即将操作先缓存到本地,等到多个命令的缓存命令一齐发送给Redis服务器,可以减小网络IO的负担,提高系统性能。

具体代码如下:

redisReply *reply;
redisAppendCommand(c,"GET %s","name");
redisAppendCommand(c,"GET %s","age");
redisAppendCommand(c,"GET %s","address");
redisAppendCommand(c,"GET %s","phone");
redisAppendCommand(c,"GET %s","email");
redisAppendCommand(c,"GET %s","hobby");
redisGetReply(c,&reply);

五、结语

本文介绍了hiredis的基本和高级操作,给大家提供了一个高性能Redis客户端的应用实例。希望本文让大家对hiredis有更深刻地认识,并在实践中得到运用。