redis 返回值型別 和 rername-command相關內容
在redis原始碼目錄redis-3.2.2\deps\hiredis\hiredis.h 裡面定義了redis命令的返回值型別
#define REDIS_REPLY_STRING 1
#define REDIS_REPLY_ARRAY 2
#define REDIS_REPLY_INTEGER 3
#define REDIS_REPLY_NIL 4
#define REDIS_REPLY_STATUS 5
#define REDIS_REPLY_ERROR 6
redis-cli 程式碼裡面輸出返回值的幾個函式分別是
static sds cliFormatReplyTTY(redisReply *r, char *prefix);
static sds cliFormatReplyRaw(redisReply *r)
static sds cliFormatReplyCSV(redisReply *r)
三個靜態函式
比較常見的返回值型別是string型別 int型別
還有一種型別 list型別的 函式裡面用了遞迴查詢的方法
case REDIS_REPLY_ARRAY:
if (r->elements == 0) {
out = sdscat(out,"(empty list or set)\n");
} else {
unsigned int i, idxlen = 0;
char _prefixlen[16];
char _prefixfmt[16];
sds _prefix;
sds tmp;
/* Calculate chars needed to represent the largest index */
i = r->elements;
do {
idxlen++;
i /= 10;
} while(i);
/* Prefix for nested multi bulks should grow with idxlen+2 spaces */
memset(_prefixlen,' ',idxlen+2);
_prefixlen[idxlen+2] = '\0';
_prefix = sdscat(sdsnew(prefix),_prefixlen);
/* Setup prefix format for every entry */
snprintf(_prefixfmt,sizeof(_prefixfmt),"%%s%%%ud) ",idxlen);
for (i = 0; i < r->elements; i++) {
/* Don't use the prefix for the first element, as the parent
* caller already prepended the index number. */
out = sdscatprintf(out,_prefixfmt,i == 0 ? "" : prefix,i+1);
/* Format the multi bulk entry */
tmp = cliFormatReplyTTY(r->element[i],_prefix);
out = sdscatlen(out,tmp,sdslen(tmp));
sdsfree(tmp);
}
sdsfree(_prefix);
}
break;
考慮到命令可能有多組資料 一層一層的去獲取資料
涉及到一些問題
比如 我們呼叫一個C的介面執行redis命令 列印除錯資訊一定要知道這個redisReply 這個結構體的意思 否則會引起記憶體錯誤
reply=redisCommand(c,command);
printf("%s\n",reply->str);
如果reply->str是個空指標會記憶體錯誤
舉個例子 command如果是 config get maxmemory 的時候 返回的是個資料集 這樣去列印reply->str的時候就會報記憶體錯誤了
資料集的值是儲存
/* This is the reply object returned by redisCommand() */
typedef struct redisReply {
int type; /* REDIS_REPLY_* */
long long integer; /* The integer when type is REDIS_REPLY_INTEGER */
int len; /* Length of string */
char *str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */
size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */
struct redisReply **element; /* elements vector for REDIS_REPLY_ARRAY */
} redisReply;
這裡面的 element這個二級指標裡面
我們如果取資料 需要printf("%s\n",reply->elment[i]->str); 這樣才能取出資料
二、rename 相關
redis提供對命令重命令的功能
rename-command SET b840fc02d524045429941cc15f59e41cb7be6c51
這是官方提供的例子
rename把命令替換成一個字串 (特別注意字串必須用字母開頭 不能使用數字)
相關文章
- Redis 五種資料型別和相關操作命令Redis資料型別
- mysql相關內容索引MySql索引
- oracle相關內容索引Oracle索引
- 專案內容相關
- redis的五大資料型別和相關語法的使用Redis大資料資料型別
- 系統相關內容索引索引
- long型別相關型別
- JDBC mysql 相關內容筆記JDBCMySql筆記
- Makefile書寫命令相關內容
- Python import相關內容區別介紹( import *** as 、from***import )PythonImport
- 頁面佈局的相關內容
- golang的記憶體相關內容Golang記憶體
- Perl6 檔案相關內容
- proc檔案系統相關內容
- 網路配置相關內容總結
- JavaSE 形參和返回值(引用型別)Java型別
- Redis 字串型別實現內幕Redis字串型別
- java檔案相關(檔案追加內容、檔案內容清空、檔案內容讀取)Java
- javascript關於URI相關內容簡單介紹JavaScript
- javascript時間日期相關內容介紹JavaScript
- javascript的節點相關內容介紹JavaScript
- Redis字串型別內部編碼剖析Redis字串型別
- [Redis] 淺談Redis內的幾種資料型別Redis資料型別
- 多型中的返回值型別多型型別
- Linux檔案內容檢視相關命令Linux
- js效能優化相關內容筆記整理JS優化筆記
- Java相關技術點及技術內容Java
- 形式引數和返回值型別的對比型別
- 360度客戶影片的內容和四種資料型別資料型別
- Mysql 基礎資料型別(無時間相關型別)MySql資料型別
- 加密型別以及相關演算法加密型別演算法
- 公司型別相關的幾個概念型別
- 對於返回值型別不確定的函式如何限定返回值型別型別函式
- ps切圖實用小技巧、圖片格式的區別及相關內容
- Linux 相關學習內容(不定期更新)Linux
- Linux Limit相關內容設定大全(值得收藏)LinuxMIT
- Linux作業系統相關內容介紹!Linux作業系統
- 利用echo把內容寫入相關solaris 檔案