基本功能步骤:
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) {
/* Let *c leak for now... */
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。