Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Hiredis đang chờ tin nhắn

Bạn không cần phải nói với người được thuê rằng bạn cần phải đợi trên kênh:vòng lặp sự kiện sẽ chỉ đợi trên kết nối Redis đã được đăng ký trước đó.

Đây là một ví dụ đầy đủ:

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

Bạn có thể kiểm tra nó bằng cách sử dụng lệnh sau để xuất bản một cái gì đó:

redis-cli publish foo something

Hàm event_base_dispatch là hàm thực sự khởi chạy vòng lặp sự kiện và làm cho nó chờ khi đăng ký Redis.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chuyển đổi cơ sở dữ liệu MySQL đơn giản sang giải pháp NoSQL

  2. Spring Data Redis - UUID id - ConverterNotFoundException

  3. Làm thế nào để lấy các khóa không khớp với một mẫu cụ thể trong redis?

  4. Redis cache so với sử dụng bộ nhớ trực tiếp

  5. Tại sao KEYS được khuyên không nên sử dụng trong Redis?