我想发送一个PING
到Redis来检查连接是否正常,现在我可以直接安装redis-cli
,但是我不想这样做,而且curl
已经存在了。那么我怎么能滥用curl
来做到这一点呢?基本上我需要关闭这里发送的内容:
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: localhost:6379
> Accept: */*
>
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'User-Agent:'
-ERR unknown command 'Host:'
-ERR unknown command 'Accept:'
我可以通过添加-A ""
来完全去掉User-Agent
,但是我找不到其他的东西来代替剩下的,你知道我怎么做吗?
9条答案
按热度按时间nnt7mjpx1#
当你想使用curl时,你需要REST而不是RESP,比如webdis、tinywebdis或者turbowebdis。https://github.com/markuman/tinywebdis#turbowebdis-tinywebdis--cherrywebdis
如果没有用于redis的REST接口,您可以使用netcat。
对于密码保护的redis,你可以像这样使用netcat:
使用netcat时,您必须自己构建RESP协议。
更新日期:2018年1月9日
我构建了一个强大的bash函数,它可以通过tcp以任何代价ping redis示例
使用
redis-ping localhost
ldioqlga2#
不是curl,但不需要HTTP接口或nc(对于没有安装nc的容器来说非常好)
exec 3<>/dev/tcp/127.0.0.1/6379 && echo -e "PING\r\n" >&3 && head -c 7 <&3
应该给予你
+PONG
您可以从this fantastic article阅读更多关于正在发生的事情的信息。
yvgpqqbh3#
我需要在@Markus提供的nc中添加一个sleep,才能让它在远程系统中工作:
有关详细信息,请参见Request/Response protocols and RTT: Redis Pipelining。
kcwpcxri4#
您也可以使用
telnet localhost 6379
,如果连接成功,请键入ping
外出使用
quit
daupos2t5#
我在mac( Catalina )上运行了docker,并使用
然后我用电脑的IP测试了连接
收到
使用来自
docker inspect redis-mac
的IP不起作用。实际上,我正在测试使用redis作为缓存提供程序的Sping Boot 应用程序,所以我需要测试连接。如果你是第一次使用docker,下面是第一个命令的一些解释:将redis作为容器运行,主机端口6379,docker端口6379,并将容器命名为redis-mac .现在如果镜像已经可用,docker守护进程将创建一个容器,否则它将从docker hub中提取镜像,然后运行容器.您可以执行
docker ps
来检查容器是否正在运行.6ie5vjzr6#
为了只检查主机是否已响应,我使用了以下命令:
结果
扩展
netcat
解决方案,如果您需要关闭连接,这对我很有效:产出
whlutmcx7#
详细说明@Joel B的伟大答案。我需要在docker容器中的shell脚本中使用这个,没有curl,没有redis-cli,没有nc...我正在测试的REDIS是kubernetes的公开redis-ha Helm图表,从这里开始:https://github.com/helm/charts/tree/master/stable/redis-ha
要设置的变量有:
技术的错综复杂在评论中有描述(我建议你把评论留在原地,以保存你的同事--以及未来的自己--在试图破译尖括号时免于某种疯狂)
olqngx598#
如果Redis示例需要pass,这可能会有帮助:
将{requirepass-string-from-redis-config}替换为“requirepass”redis.conf中的字符串
eivnm1vs9#
运行以下代码,即使你的Redis在Docker上,对我来说也是有效的:
正常时得到以下响应: