redisCommand接口的用法--利用hiredis库获取MGET命令的结果的坑!
生活随笔
收集整理的這篇文章主要介紹了
redisCommand接口的用法--利用hiredis库获取MGET命令的结果的坑!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
工作中遇到如下業務場景:
我需要利用大批量的key去借助MGET命令來獲取redis服務器上的記錄,但是我卻始終獲取不到。當然我可以使用GET去一條一條地獲取,但是這樣一來,效率不高。所以最好的方式是,大批量一次性獲取這樣的記錄。
我有問題的這段代碼是這樣的:
但是在構造MGET命令時,我犯了一個很弱智的錯誤,就是redisCommand命令這里,當使用%s時,表示后面的字符串中不含有空格的,但是我將這些key拼起來時,特意加了空格,這就是我獲取失敗的原因。這里是原型定義
void *redisCommand(redisContext *c, const char *format, ...);
這里說明一個redisCommand的用法,在C++環境中,可以只要format常量字符串,不要后面的變量,但是如果你非要的話,一定要保證它們是單個不含空格的字符串。
可以這樣使用
reply = redisCommand(redis, "MGET %s %s", "foo", "name" );
if ( reply->type == REDIS_REPLY_ERROR )printf( "Error: %s\n", reply->str );
else if ( reply->type != REDIS_REPLY_ARRAY )printf( "Unexpected type: %d\n", reply->type );
else
{int i;for ( i=0; i<reply->elements; ++i )printf( "Result: %s\n", reply->element[i]->str );
}
freeReplyObject(reply);也可以這樣使用,這是我更正后的代碼,
下面是運行結果圖
說明如下:
1.使用SADD向SET database中添加記錄時, 我們無需對添加的item加雙引號.不要這樣
而要這樣
總結
以上是生活随笔為你收集整理的redisCommand接口的用法--利用hiredis库获取MGET命令的结果的坑!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 14.04 64bit上升
- 下一篇: epoll ET模式服务器和客户端源码例