1

我无法连接到使用默认选项(127.0.0.1:6379)运行的 redis 服务器credis_connect()。这是我使用的测试代码:

#include <stdio.h>
#include "credis.h"

int main(int argc, char **argv)
{
    REDIS rh;
    char *val;
    int rc;


    printf("connecting to server at Port:6379\n");
    rh = credis_connect(NULL, 6379, 10000);

    if(rh == NULL)
    {
        printf("Error in connecting to server.\n");
        return -1;
    }
    printf("Connected to Redis Server. \n");

    /* ping server */
    rc = credis_ping(rh);
    printf("ping returned: %d\n", rc);


    /* set value of key "kalle" to "kula" */
    printf("Setting Key value to Redis Server.\n");
    credis_set(rh, "kalle", "kula");

    printf("Key value is set.\n");

      /* get value of key "kalle" */
    credis_get(rh, "kalle", &val);
    printf("get kalle returned: %s\n", val);

    /* close connection to redis server */
    credis_close(rh);

    return 0;
}

仅供参考:我在 ubuntu 12.10 上运行 redis 2.6.10 和 credis 0.2.3。

4

1 回答 1

1

我不认为 credis 0-2-3 可以与现代 Redis 版本(2.6)一起使用。credis 0-2-3 于 2010 年发布,Redis 发展了很多。

连接失败,因为 credis 需要在套接字连接后解析 INFO 命令的输出。目的是检索 Redis 服务器版本。因为 INFO 的输出发生了变化(它现在包括用于隔离部分的注释),credis 不再能够提取版本,所以它返回一个错误。

如果你想解决这个特定问题(但可能还有很多其他问题......)你只需要编辑 credis.c 源代码并替换:

int items = sscanf(rhnd->reply.bulk,
                   "redis_version:%d.%d.%d\r\n",
                   &(rhnd->version.major),
                   &(rhnd->version.minor),
                   &(rhnd->version.patch));

经过:

int items = sscanf(rhnd->reply.bulk,
                   "# Server\nredis_version:%d.%d.%d\r\n",
                   &(rhnd->version.major),
                   &(rhnd->version.minor),
                   &(rhnd->version.patch));

我的建议是切换到hiredis,它是官方的C 客户端。

于 2013-03-11T19:08:07.457 回答