使用hiredis以JSON格式发送数据到Redis

kt06eoxx  于 2023-01-20  发布在  Redis
关注(0)|答案(1)|浏览(248)

我对Redis完全陌生。我有一个C应用程序运行在嵌入式Linux设备上,它应该连接到本地公开的Redis。我使用的是Hiredis。
我可以使用redisConnect()成功连接到Redis。
现在我需要将数据点写入Redis的属性中:value JSON格式,示例如下:

{
  "value" : 1000.1,
  "unit"  : "mA",
  "name"  : "Current"
}

我一直在看示例代码,但没有看到任何东西确切地显示我试图实现的目标。
是否可以按如下方式使用redisCommand()

redisCommand(redisContext,"value %f unit %s name %s", 1000.1, "mA", "Current");
lmvvr0a8

lmvvr0a81#

以下是对我有效的方法:

#include <stdio.h>
#include <stdlib.h>

#include <hiredis.h>

int main(void) {
    redisContext *redis_ctx = NULL;
    redisReply *reply = NULL;
    struct timeval redis_timeout = { 1, 500000 }; // 1.5 seconds
    redis_ctx = redisConnectWithTimeout("127.0.0.1", 6379, redis_timeout);
    if (redis_ctx == NULL || redis_ctx->err) {
        if (redis_ctx) {
            printf("Redis Connection error: %s\n", redis_ctx->errstr);
            redisFree(redis_ctx);
        } else {
            printf("Connection error: can't allocate redis context\n");
        }
    }
    if (redis_ctx) {
        reply = redisCommand(redis_ctx, "PUBLISH test_channel {\"attrb1\":%d,\"attrb2\":%d,\"attrb3\":%s}", 1, 2, "11");
        printf("EXTRA EXTRA: %s", reply->str);
        freeReplyObject(reply);
        redisFree(redis_ctx);
    }

    return EXIT_SUCCESS;
}

注意,字符串的JSON部分传递给redisCommand,字段和值之间没有任何空格。

相关问题