【问题标题】:Redis-cli command to restart the redis serverredis-cli 命令重启redis服务器
【发布时间】:2016-07-20 19:33:21
【问题描述】:

我使用来自 redis-cli 的 SHUTDOWN 终止了 redis 服务器。现在提示显示'未连接>'。

我发现重启服务器的唯一方法是退出 redis-cli 提示,然后重新启动 redis 服务。

我的问题是,有没有办法在不退出 redis-cli 提示的情况下使用任何 redis 命令从 redis-cli 提示重新启动服务器?

【问题讨论】:

    标签: redis redis-cli


    【解决方案1】:

    虽然您不必退出 cli,但服务器一旦关闭就无法从中重新启动。

    【讨论】:

    • 谢谢!所以重启服务器的唯一方法是退出redis-cli并执行$ sudo service redis-cli restart?
    • 您不必退出 cli - 您可以简单地打开另一个 shell 会话。服务器启动后,返回 cli 的 not connected> 提示符输入任何有效命令以重新连接到服务器(例如 PING)。
    • 这为我节省了大量的研究时间,而这显然会一事无成。已经搜索了很多!非常感谢!
    【解决方案2】:

    我同意 Itamar Haber 的回答,我会揭开细节

    服务器重启后,如果你在这个'未连接>'中输入任何命令,如果发送命令失败,redis-cli会再次尝试连接。

    while (1) {
            config.cluster_reissue_command = 0;
            if (cliSendCommand(argc,argv,repeat) != REDIS_OK) {
                cliConnect(1);//try to connect redis server if sendcommand failed
    
                if (cliSendCommand(argc,argv,repeat) != REDIS_OK) {//after try to connect,send commend again
                    cliPrintContextError();
                    return REDIS_ERR;
                }
             }
        }
    

    redis-server重启成功后,会监听socket事件,如果有socket连接,服务器会在此处接受连接

         void acceptTcpHandler(aeEventLoop *el, int fd, void *privdata, int mask) {
                    ......some code.......
        while(max--) {
            cfd = anetTcpAccept(server.neterr, fd, cip, sizeof(cip), &cport);//accept connect
            if (cfd == ANET_ERR) {
                if (errno != EWOULDBLOCK)
                    serverLog(LL_WARNING,
                        "Accepting client connection: %s", server.neterr);
                return;
            }
            serverLog(LL_VERBOSE,"Accepted %s:%d", cip, cport);
            acceptCommonHandler(cfd,0,cip);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多