Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Hiredis czeka na wiadomość

Nie musisz mówić Hiredis, że musisz czekać na kanale:pętla wydarzeń będzie po prostu czekać na połączenie Redis, które zostało wcześniej zarejestrowane.

Oto kompletny przykład:

#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;
}

Możesz to przetestować, używając następującego polecenia, aby coś opublikować:

redis-cli publish foo something

Funkcja event_base_dispatch to ta, która faktycznie uruchamia pętlę zdarzeń i sprawia, że ​​czeka na subskrypcję Redis.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Znajdowanie kluczy za pomocą symboli wieloznacznych

  2. Redis szuka env redis zmiennej url nie jestem pewien, gdzie umieścić zmienną env zły URI (nie jest URI?):(URI::InvalidURIError)

  3. Jak zaktualizować redis po aktualizacji bazy danych?

  4. Anulować już wykonywane zadanie w Pythonie RQ?

  5. Redis nie pobierze danych z pamięci podręcznej