您的位置:首页 > 数据库 > Redis

redis客户端的几个问题总结

2016-09-23 12:40 375 查看

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地址下载,这个版本没有编译问题,也支持集群访问。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息