亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C基礎 redis緩存訪問詳解

2020-01-26 14:33:28
字體:
來源:轉載
供稿:網友

引言

先說redis安裝, 這里采用的環境是.

Linux version 4.4.0-22-generic (buildd@lgw01-41) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016

對于 ubuntu 安裝 redis是非常簡單的. 這里采用源碼安裝. 安裝代碼如下

wget http://download.redis.io/releases/redis-3.0.6.tar.gztar xzf redis-3.0.6.tar.gzcd redis-3.0.6make

安裝后我的環境是

那我們測試一下. 安裝結果. 先啟動 redis-server 服務器.

再啟動 redis-cli 客戶端

我們開始測試一下. 

 測試之后一切正常. redis linux上安裝基本完畢了. 更加詳細的參照

Redis 官網教程 很詳細 http://www.redis.net.cn/tutorial/3501.html

前言

現在我們安裝 redis c 訪問的驅動. hiredis. 一開始都是下載安裝. 我是直接從 hiredis git官網下載安裝的.

hiredis  源碼 https://github.com/redis/hiredis

wget https://github.com/redis/hiredis/archive/master.zipunzip master.zip

 安裝完畢會看見這樣環境

執行安裝命令

makesudo make install

本質對于 make install 執行了下面步驟

mkdir -p /usr/local/include/hiredis /usr/local/libcp -a hiredis.h async.h read.h sds.h adapters /usr/local/include/hirediscp -a libhiredis.so /usr/local/lib/libhiredis.so.0.13cd /usr/local/lib && ln -sf libhiredis.so.0.13 libhiredis.socp -a libhiredis.a /usr/local/libmkdir -p /usr/local/lib/pkgconfigcp -a hiredis.pc /usr/local/lib/pkgconfig

此刻基本上 hiredis 驅動已經安裝完畢. 后面解釋一下, 驅動提供的api.

常用的 api如下.

/* * redis鏈接函數, 返回redis上下文. * ip  : 鏈接地址的ip * port  : 鏈接端口 *     : 返回 redis上下文, NULL表示獲取失敗 */redisContext *redisConnect(const char *ip, int port)/* * 執行redis操作命令, 返回得到的結果集 *  context  : redisConnect 返回的redis上下文對象 *  format  : 等同于 printf格式控制符 *  ...    : 后面可變參數, 需要和 format中格式符對應 *      : 返回 得到的結果集 */void *redisCommand(redisContext *context, const char *format, ...);/* * 釋放redis命令操作返回過來的結果集 * reply  : redisCommand返回的結果集 */void freeReplyObject(void *reply);/* * 釋放鏈接上下文 * context  : redisConnect返回的鏈接上下文 */void redisFree(redisContext *context);

 更加詳細的解釋我們可以看 源碼接口文件 hiredis/hiredis.h .  例如

第一個是 redisConnect 返回的 redisContext上下文結構/* Context for a connection to Redis */typedef struct redisContext {  int err; /* Error flags, 0 when there is no error */  char errstr[128]; /* String representation of error when applicable */  int fd;  int flags;  char *obuf; /* Write buffer */  redisReader *reader; /* Protocol reader */  enum redisConnectionType connection_type;  struct timeval *timeout;  struct {    char *host;    char *source_addr;    int port;  } tcp;  struct {    char *path;  } unix_sock;} redisContext;還有一個是 redisCommand 返回的命令集/* 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;

關于 hiredis基本的C驅動接口,解釋完畢. 后面開始寫demo測試一番.最好的理解方式還是看官方源碼和測試代碼.

正文

首先來個簡單的demo測試. simpleget.c

#include <stdio.h>#include <stdlib.h>#include <hiredis/hiredis.h>/* * 請求 redis網絡緩存服務器內存. */int main(int argc, char* argv[]) {  redisContext *conn = redisConnect("127.0.0.1", 6379);  if(NULL == conn) {    fprintf(stderr, "redisConnect 127.0.0.1:6379 error!/n");    exit(EXIT_FAILURE);  }    if(conn->err) {    fprintf(stderr, "redisConect error:%d/n", conn->err);    redisFree(conn);    exit(EXIT_FAILURE);  }      // 這里redisConnect 鏈接對象創建完畢了  redisReply *reply = redisCommand(conn, "get foo");  if(reply && reply->type == REDIS_REPLY_STRING) {    printf("get foo => %s/n", reply->str);  }    printf("reply->type = %d/n", reply->type);  // 釋放這個對象  freeReplyObject(reply);  // 釋放hiredis 上下文對象    redisFree(conn);  return 0;}

編譯命令是

gcc -Wall -ggdb -o simpleget.out simpleget.c -lhiredis

最終測試結果是

最終測試結果是


這里表明流程是跑通了. 這里擴展一下, 有時候在Linux上查找函數或宏定義聲明好麻煩. 我用的方式是

 find . -name *.h | xargs grep 'REDIS_REPLY_STRING'

笨方法也挺實用的. 查找的結果是 上面 REDIS_REPLY_STRING 定義在 hiredis/read.h 中 摘錄部分如下

#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接口使用基本入門了. 后面再舉一個 操作list的操作代碼 setlist.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <hiredis/hiredis.h>/* * 請求 redis網絡緩存服務器內存. */int main(int argc, char* argv[]) {  // 忽略服務器退出,導致當前進程退出  signal(SIGPIPE, SIG_IGN);  redisContext *conn = redisConnect("127.0.0.1", 6379);  if(NULL == conn) {    fprintf(stderr, "redisConnect 127.0.0.1:6379 error!/n");    exit(EXIT_FAILURE);  }    if(conn->err) {    fprintf(stderr, "redisConect error:%d/n", conn->err);    redisFree(conn);    exit(EXIT_FAILURE);  }      // 這里redisConnect 鏈接對象創建完畢了  freeReplyObject(redisCommand(conn, "lpush mylist foo"));  freeReplyObject(redisCommand(conn, "lpush mylist bar"));  redisReply *reply = redisCommand(conn, "lrange mylist 0 -1");  if(reply && reply->type == REDIS_REPLY_ARRAY && reply->elements == 2) {    printf("%s %s/n", reply->element[0]->str, reply->element[1]->str);  }    else {    printf("redisCommand [lrange mylist 0 -1] error:%d. %s/n", reply->type, reply->str);  }    // 釋放這個對象  freeReplyObject(reply);  // 釋放hiredis 上下文對象    redisFree(conn);  return 0;}

編譯代碼

gcc -Wall -ggdb -o setlist.out setlist.c -lhiredis

 運行結果如下

更加詳細介紹請參照 hiredis git上 源碼.

后記

 到這里關于C簡單使用控制redis服務器, 基本講完了. 錯誤是難免的. 歡迎指正.  

以上這篇C基礎 redis緩存訪問詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美另类精品xxxx孕妇| 欧美又大粗又爽又黄大片视频| 亚洲欧美第一页| 亚洲男人第一网站| 亚洲最新av网址| 久久亚洲精品国产亚洲老地址| 亚洲在线www| 欧美裸体男粗大视频在线观看| 成人h视频在线观看播放| 青青草国产精品一区二区| 国产精品亚洲第一区| 日韩亚洲精品电影| 北条麻妃在线一区二区| 欧洲美女免费图片一区| 日韩中文字幕不卡视频| 久久久国产在线视频| 久久久女人电视剧免费播放下载| 精品亚洲精品福利线在观看| 国产精品海角社区在线观看| 国产97色在线|日韩| 欧美成人中文字幕在线| 国产成人97精品免费看片| 国产专区欧美专区| 国产精品99久久久久久www| 97超碰国产精品女人人人爽| 高清一区二区三区四区五区| 国产精品久久久久久影视| 中文欧美在线视频| 国产精品一区专区欧美日韩| 亚洲综合色av| 在线观看视频99| 日本国产高清不卡| 久久久久久久色| 久久精品国产精品亚洲| 亚洲精品女av网站| 欧美在线视频免费观看| 亚洲欧美一区二区精品久久久| 91国产高清在线| 国产香蕉97碰碰久久人人| 欧美黑人国产人伦爽爽爽| 久久久久在线观看| 夜夜嗨av一区二区三区四区| 久久久精品一区二区三区| 国内揄拍国内精品| 亚洲香蕉成视频在线观看| 26uuu亚洲国产精品| 国产精品美女免费看| 欧美在线免费视频| 色偷偷噜噜噜亚洲男人| 欧美疯狂性受xxxxx另类| 国产精品美女无圣光视频| 97免费视频在线播放| 久久69精品久久久久久久电影好| 久久99热精品这里久久精品| 欧美激情精品久久久久久大尺度| 欧美性极品xxxx娇小| 日韩欧美精品网站| 国产精品视频一区二区三区四| 美日韩精品免费观看视频| 久久久噜噜噜久久| 欧美一级电影免费在线观看| 亚洲美女av网站| 欧美一区二区.| 97在线视频免费| 亚洲视频网站在线观看| 国产亚洲精品久久久久久777| 中文字幕av一区中文字幕天堂| 国产噜噜噜噜久久久久久久久| 久久精品中文字幕免费mv| 亚州国产精品久久久| 国产精品爱啪在线线免费观看| 北条麻妃一区二区在线观看| 国产精品久久久久久一区二区| 亚洲欧美日韩一区二区在线| 亚洲跨种族黑人xxx| 97视频在线观看亚洲| 在线观看不卡av| 91久久久久久久久久久| 精品一区二区三区电影| 国产精品爽爽ⅴa在线观看| 国产精品扒开腿爽爽爽视频| 成人福利在线观看| 欧美高清一级大片| 性欧美xxxx视频在线观看| 国产日本欧美视频| 亚洲国产美女久久久久| 国产精品视频yy9099| 久久99久久99精品免观看粉嫩| 这里只有视频精品| 国产99视频精品免视看7| 精品爽片免费看久久| 久久影视三级福利片| 亚洲网在线观看| 亚洲a在线播放| 国产欧美一区二区三区在线看| 亚洲精品一区二区在线| 欧美野外wwwxxx| 久热在线中文字幕色999舞| 日韩精品视频观看| 久久久久久午夜| 亚洲精品自拍第一页| 国产欧美va欧美va香蕉在| 国产欧美一区二区三区在线| 亚洲va男人天堂| 久久久久中文字幕2018| 91沈先生作品| 亚洲人午夜精品免费| 自拍亚洲一区欧美另类| 国产精品69久久久久| 精品视频在线观看日韩| 精品国产电影一区| 免费91在线视频| 不卡av电影在线观看| 欧美日韩一区二区三区在线免费观看| 成人午夜小视频| 国产精品嫩草影院一区二区| 国产欧美日韩精品丝袜高跟鞋| 国产精品国语对白| 精品久久久久久电影| 中文字幕一区二区精品| 日韩在线免费av| 欧美亚洲国产视频小说| 免费97视频在线精品国自产拍| 精品欧美一区二区三区| 亚洲一区精品电影| 欧美国产亚洲精品久久久8v| 一本一本久久a久久精品综合小说| 欧美成人一区二区三区电影| 一区二区在线视频| 一区二区三区高清国产| 欧美日韩性视频在线| 日韩在线视频免费观看| 亚洲日本中文字幕| 欧美洲成人男女午夜视频| 亚洲成人黄色在线观看| 性金发美女69hd大尺寸| 亚洲欧美第一页| 久久久久久久影院| 国产亚洲人成网站在线观看| 日韩经典中文字幕| 欧美精品日韩www.p站| 亚洲国产精品中文| 国产98色在线| 精品国产一区二区三区在线观看| 九九热r在线视频精品| 91精品国产综合久久久久久蜜臀| 日韩在线视频中文字幕| 欧美激情手机在线视频| 亚洲人成亚洲人成在线观看| 国产精品激情av在线播放| 国产一区二区三区在线视频| 欧美日韩高清区| 亚洲人成自拍网站| 永久免费看mv网站入口亚洲| 91麻豆国产语对白在线观看| 欧美日韩亚洲系列| 大胆欧美人体视频| 在线日韩第一页| 正在播放国产一区| 国产一区二区三区在线| 欧美疯狂xxxx大交乱88av| 欧美成人免费一级人片100| 国产精品成人一区二区三区吃奶| 国产亚洲精品久久久久动|