基本功能步骤:
1,下载安装Redis,下载地址:http://www.redis.cn/download.html。
2,下载安装hiredis,下载地址:https://github.com/redis/hiredis。
将libhiredis.so放到/usr/lib/目录下。
3,在hiredis-master目录下编写客户端程序。
 
- #include <stdio.h>  
 
- #include "hiredis.h"  
 
-   
 
- int main()  
 
- {  
 
-      redisContext *conn  = redisConnect("127.0.0.1",6379);  
 
-      if(conn != NULL && conn->err)  
 
-      {  
 
-          printf("connection error: %s\n",conn->errstr);  
 
-          return 0;  
 
-      }  
 
-      redisReply *reply = (redisReply*)redisCommand(conn,"set foo 1234");  
 
-      freeReplyObject(reply);  
 
-   
 
-      reply = redisCommand(conn,"get foo");  
 
-      printf("%s\n",reply->str);  
 
-      freeReplyObject(reply);  
 
-   
 
-      redisFree(conn);  
 
-      return 0;  
 
- }  
 
 
编译命令:gcc -o redistest redistest.c -lhiredis
 
4,启动服务器,运行客户端程序。
 
Redis pub/sub功能实现。
发布pub功能:
 
- #include <stdio.h>  
 
- #include <sys/time.h>  
 
- #include "hiredis.h"  
 
-   
 
- int main()  
 
- {  
 
-      struct timeval begin;  
 
-   
 
-      redisContext *conn  = redisConnect("127.0.0.1",6379);  
 
-      if(conn != NULL && conn->err)  
 
-      {  
 
-          printf("connection error: %s\n",conn->errstr);  
 
-          return 0;  
 
-      }  
 
-   
 
-      gettimeofday(&begin, NULL);  
 
-      redisReply *reply = (redisReply*)redisCommand(conn,"publish foo 1234");  
 
-   
 
-      int sec, usec;  
 
-      sec = begin.tv_sec;  
 
-      usec = begin.tv_usec;  
 
-   
 
-      printf("%d\t%d\n", sec, usec);  
 
-   
 
-      freeReplyObject(reply);  
 
-   
 
-      reply = redisCommand(conn,"get foo");  
 
-      printf("%s\n",reply->str);  
 
-      freeReplyObject(reply);  
 
-   
 
-      redisFree(conn);  
 
-      return 0;  
 
- }  
 
 
订阅sub功能:
 
 
- #include <sys/time.h>  
 
- #include <stdio.h>  
 
- #include <stdlib.h>  
 
- #include <string.h>  
 
- #include <signal.h>  
 
- #include "hiredis.h"  
 
- #include "async.h"  
 
- #include "adapters/libevent.h"  
 
-   
 
- void subCallback(redisAsyncContext *c, void *r, void *priv) {  
 
-     struct timeval end;  
 
-     int sec, usec;  
 
-   
 
-     redisReply *reply = r;  
 
-     if (reply == NULL) return;  
 
-     if ( reply->type == REDIS_REPLY_ARRAY && reply->elements == 3 ) {  
 
-         if ( strcmp( reply->element[0]->str, "subscribe" ) != 0 ) {  
 
-   
 
-                 gettimeofday(&end,NULL);  
 
-   
 
-                 sec = end.tv_sec;  
 
-                 usec = end.tv_usec;  
 
-                 printf("%d\t%d\n", sec, usec);  
 
-   
 
-             printf( "Received[%s] channel %s: %s\n",  
 
-                     (char*)priv,  
 
-                     reply->element[1]->str,  
 
-                     reply->element[2]->str );  
 
-         }  
 
-     }  
 
- }  
 
-   
 
- void connectCallback(const redisAsyncContext *c, int status) {  
 
-     if (status != REDIS_OK) {  
 
-         printf("Error: %s\n", c->errstr);  
 
-         return;  
 
-     }  
 
-     printf("Connected...\n");  
 
- }  
 
-   
 
- void disconnectCallback(const redisAsyncContext *c, int status) {  
 
-     if (status != REDIS_OK) {  
 
-         printf("Error: %s\n", c->errstr);  
 
-         return;  
 
-     }  
 
-     printf("Disconnected...\n");  
 
- }  
 
-   
 
- int main (int argc, char **argv) {  
 
-     signal(SIGPIPE, SIG_IGN);  
 
-     struct event_base *base = event_base_new();  
 
-   
 
-     redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);  
 
-     if (c->err) {  
 
-         
 
-         printf("Error: %s\n", c->errstr);  
 
-         return 1;  
 
-     }  
 
-   
 
-     redisLibeventAttach(c,base);  
 
-     redisAsyncSetConnectCallback(c,connectCallback);  
 
-     redisAsyncSetDisconnectCallback(c,disconnectCallback);  
 
-     redisAsyncCommand(c, subCallback, (char*) "sub", "SUBSCRIBE foo");  
 
-   
 
-     event_base_dispatch(base);  
 
-     return 0;  
 
- }  
 
 
 
pub编译命令同上,sub编译命令:gcc -o sub sub.c -lhiredis -levent
 
注意:
1,编译基本程序时可能需要建立链接:ln -s libhiredis.so libhiredis.so.0.12
2,1,订阅sub需要安装libevent-dev。
 
Redis C++编程实例
原文:http://www.cnblogs.com/fire909090/p/6770059.html