sql >> データベース >  >> NoSQL >> Redis

メッセージを待っているHiredis

    チャネルで待機する必要があることをhiredisに通知する必要はありません。イベントループは、以前に登録されたRedis接続で待機するだけです。

    完全な例を次に示します。

    #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) {
        redisReply *reply = 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 );
            }
        }
    }
    
    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;
    }
    

    次のコマンドを使用して何かを公開するだけでテストできます。

    redis-cli publish foo something
    

    event_base_dispatch関数は、実際にイベントループを起動し、Redisサブスクリプションを待機させる関数です。



    1. MongoDBにMMAPv1ストレージエンジンを引き続き使用する必要がある理由

    2. 既存のコレクションに新しいバリデーターを追加する

    3. jedisを使用してredisに接続できません

    4. mongoのコマンドライン認証が失敗する