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;
^这里有这个问题的讨论
有两种解决办法:- 使用0.12.1版本,这个版本没有问题
- 加上-std=c99编译器选项
解决了编译问题,问题又来了,此版本不支持redis集群
- 支持redis集群版本hiredis-vip
github地址下载,这个版本没有编译问题,也支持集群访问。
以上是关于redis客户端的几个问题总结的主要内容,如果未能解决你的问题,请参考以下文章