日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

redisCommand接口的用法--利用hiredis库获取MGET命令的结果的坑!

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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命令的结果的坑!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。