redis客户端的几个问题总结

Posted 真诚的程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis客户端的几个问题总结相关的知识,希望对你有一定的参考价值。

redis-cli的批量数据导入

具体可以参考redis官网的内容Redis Mass Insertion,这里也有中文版的

  • 导入命令

cat test.proto | redis-cli -c -h 10.118.15.7 -p 7002 –pipe

  • 文件的生成
    现在的问题就是test.proto这个文件的生成,需要参考redis的协议文档
    以命令SET name csdn为例,生成的协议为:
    *3\\r\\n$3\\r\\nSET\\r\\n$4\\r\\nname\\r\\n$4\\r\\ncsdn\\r\\n
    解释如下:
    *3 代表这条命令总共有三个参数,分别为SET,name,csdn
    $3 代表第一个参数的长度,也就是SET字符串的长度
    SET
    $4 代表第二个参数的长度,也就是name字符串的长度
    name
    $4 代表第三个参数的长度,也就是csdn字符串的长度
    csdn
    最后,每个部分都以\\r\\n分隔

  • 集群环境的导入
    在执行导入命令的时候,如果是redis集群环境,那么如何指定集群的机器呢?答案是不能指定。
    做法是指定其中一台机器的IP和端口,执行命令,如果最终Key的分配不是在这台机器上,会报类似下面的错误

    MOVED 3109 10.118.15.7:7003

我们可以中断脚本执行,然后重新指定导入命令的IP和端口为上面报错时打印的值,重新执行命令。

redis C语言客户端的选择

在redis官网列出了不同语言的客户端版本,我们可以从中找出C语言的

  • 官方版本hiredis
    可以从github上找到它的版本,先把它编译成库文件,然后再在自己的工程里使用。
    当你把hiredis的头文件放到你工程里,然后include “hiredis.h”,最后编译你的工程时,有可能会出现下面的问题

    ../hiredis.h:158:7: error: expected identifier or ( before numeric constant
    unix;
    ^

    这里有这个问题的讨论
    有两种解决办法:

    1. 使用0.12.1版本,这个版本没有问题
    2. 加上-std=c99编译器选项

解决了编译问题,问题又来了,此版本不支持redis集群

  • 支持redis集群版本hiredis-vip
    github地址下载,这个版本没有编译问题,也支持集群访问。

以上是关于redis客户端的几个问题总结的主要内容,如果未能解决你的问题,请参考以下文章

Redis基本数据结构总结

Redis基本数据结构总结之SETZSET和HASH

用BIO手写实现Redis客户端的探究(拒绝Jedis)

Redis-Redi事务注意事项

redis之Scan

Redis单线程架构以及工作方式