hiRedis操作同步API的接口函数只需下面三个即可:
redisContext*redisConnect(const char *ip, int port);
void*redisCommand(redisContext *c, const char *format, ...);
voidfreeReplyObject(void *reply);
1. 连接(Connecting)
redisconnect函数创建一个redisContext类型的数据结构,用于保存与服务器端的连接状态。redisContext 结构有一个整数类型的err域,当该值非零时表示连接有错,并表示错误类型。 更多错误信息请参考Errors部分。因此,当使用redisconnect函数连接Redis时,需要判断err域,检查建立连接是否成功。
redisContext *c = redisConnect("127.0.0.1", 6379);
if (c->err) {
printf("Error: %s\n", c->errstr);
// handle error
}
2. 发送命令(Send Commands)
hiRedis有多种方式发送命令给Redis。其中,第一个方法是使用redisCommand。该函数的原型与printf很相似。最简单的形式,我们可以如下使用redisCommand:
reply = redisCommand(context, "SET foo bar");
也可以使用像printf的格式化方法,插入字符串,如下:
reply = redisCommand(context, "SET foo %s", value);
当需要在命令中传递一个二进制安全的字符串时,可以使用%b,一个字符串指针,和size_t类型的字符串长度。
reply = redisCommand(context, "SET foo %b", value, valuelen);
3. 使用replies
当命令成功执行时,redisCommand的返回值保存一个reply;而当有错误产生时,返回NULL,并且设置context中的err域。当有错误产生时,连接不可再用,需要重新创建一个连接。
redisCommand返回的标准的replies为redisReply类型。RedisReply类型的type域用于保存客户端接收到的是哪钟类型的reply:
- REDIS_REPLY_STATUS:
命令返回一个status。status 字符串可以使用reply->str访问,字符串长度使用reply->len访问
- REDIS_REPLY_ERROR:
命令返回一个error。error字符串访问同status。
- REDIS_REPLY_INTEGER:
命令返回一个整数。整数值可以使用reply->integer域访问,类型为long long。
- REDIS_REPLY_NIL
命令返回一个nil对象,表示访问数据不存在
- REDIS_REPLY_STRING
命令返回一个字符串对象。访问同status。
- REDIS_REPLY_ARRAY
命令返回一个数组对象。数组元素个数保存在reply->elements,数组中的每个元素都是一个redisReply对象,可以通过reply->element[…index…]访问。Redis支持嵌套数组。
最后,需要调用freeReplyObject()函数释放Replies。该函数会自动释放数组或嵌套数组的sub-replies 对象,因此不需要手动释放sub-replies。
4. 断开连接
为了断开连接和释放context,需要调用如下函数:
void redisFree(redisContext *c);
该函数会立即关闭socket,然后释放context创建时的分配内容。