windows c++使用hiredis异步操作

来源:互联网 发布:raphael js 流程图 编辑:程序博客网 时间:2024/06/05 16:38
// TestRedis.c : 定义控制台应用程序的入口点。//#include <stdlib.h>#include <tchar.h>#include "hiredis.h"#include "async.h"#include <adapters/ae.h>//#include "adapters/libevent.h"static aeEventLoop *loop = NULL;#pragma comment(lib, "hiredis.lib")#pragma comment(lib, "Win32_Interop.lib")//#pragma comment(lib, "libevent.lib")//#pragma comment(lib, "libevent_core.lib")//#pragma comment(lib, "libevent_extras.lib")//#pragma comment(lib, "ws2_32.lib")// 设置命令执行后的回调函数void getCallback(redisAsyncContext *c, void *r, void *privdata) {redisReply *reply = (redisReply *)r;if (reply == NULL) return;printf("argv[%s]: %s\n", (char*)privdata, reply->str);/* Disconnect after receiving the reply to GET */redisAsyncDisconnect(c);}//设置连接回调函数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");aeStop(loop);}void subCallback(redisAsyncContext *c, void *r, void *priv) {redisReply *reply = (redisReply*)r;if (reply == NULL) return;if (reply->type == REDIS_REPLY_ARRAY && reply->elements == 3) {if (strcmp(reply->element[0]->str, "subscribe") != 0) {printf("Received[%s] channel %s: %s\n",(char*)priv,reply->element[1]->str,reply->element[2]->str);}}}int main(int argc, char **argv) {//signal(13, SIG_IGN);//struct event_config *cfg = event_config_new();//event_config_set_flag(cfg, EVENT_BASE_FLAG_STARTUP_IOCP);//struct event_base* base = event_base_new_with_config(cfg);//struct event_base* base = event_base_new();loop = aeCreateEventLoop(1024 * 10);redisAsyncContext* redis = redisAsyncConnect("127.0.0.1", 6379);if (redis == NULL || redis->err){redisAsyncFree(redis);return 0;}redisAeAttach(loop, redis);//redisLibeventAttach(redis, base);redisAsyncSetConnectCallback(redis, connectCallback);redisAsyncSetDisconnectCallback(redis, disconnectCallback);//redisAsyncCommand(redis, NULL, NULL, "SET key %b", argv[argc - 1], _tcslen(argv[argc - 1]));//发送set命令//redisAsyncCommand(redis, getCallback, (char*)"end-1", "GET key");//发送get命令redisAsyncCommand(redis, subCallback, (char*) "sub", "SUBSCRIBE foo");//event_base_dispatch(base);aeMain(loop);//redisAsyncFree(redis);getchar();return 0;}预处理器定义:_OFF_T_DEFINEDWIN32LACKS_STDLIB_H_DEBUG_CONSOLE%(PreprocessorDefinitions)NO_QFORKIMPL_WIN32_WINNT=0x0501附加包含目录:$(SolutionDir)..\deps\hiredis$(SolutionDir)..\src入口函数必须是:int main(int argc, char **argv) 文件后缀.c 或包含头文件时加extern "C"{}在项目源文件中添加adlist.c ae.c zmalloc.clibevent无法使用


0 0
原创粉丝点击