基本功能步骤:
1,下载安装Redis,下载地址:http://www.redis.cn/download.html。
2,下载安装hiredis,下载地址:https://github.com/redis/hiredis。
将libhiredis.so放到/usr/lib/目录下。
3,在hiredis-master目录下编写客户端程序。
[cpp] view plain copy
- #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功能:
[cpp] view plain copy
- #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功能:
[cpp] view plain copy
- #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。
时间: 2024-10-12 10:39:10