| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | #include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <hiredis.h>#include <async.h>#include <adapters/ae.h>/* Put event loop in the global scope, so it can be explicitly stopped */static aeEventLoop *loop;void getCallback(redisAsyncContext *c, void *r, void *privdata) {    redisReply *reply = 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);        aeStop(loop);        return;    }    printf("Connected...\n");}void disconnectCallback(const redisAsyncContext *c, int status) {    if (status != REDIS_OK) {        printf("Error: %s\n", c->errstr);        aeStop(loop);        return;    }    printf("Disconnected...\n");    aeStop(loop);}int main (int argc, char **argv) {    signal(SIGPIPE, SIG_IGN);    redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);    if (c->err) {        /* Let *c leak for now... */        printf("Error: %s\n", c->errstr);        return 1;    }    loop = aeCreateEventLoop(64);    redisAeAttach(loop, c);    redisAsyncSetConnectCallback(c,connectCallback);    redisAsyncSetDisconnectCallback(c,disconnectCallback);    redisAsyncCommand(c, NULL, NULL, "SET key %b", argv[argc-1], strlen(argv[argc-1]));    redisAsyncCommand(c, getCallback, (char*)"end-1", "GET key");    aeMain(loop);    return 0;}
 |