3

redis-cli から SHUTDOWN を使用して redis サーバーを終了しました。プロンプトに「接続されていません>」と表示されます。

サーバーを再起動する唯一の方法は、redis-cli プロンプトを終了してから redis サービスを再起動することでした。

私の質問は、redis-cli プロンプトを終了せずに redis コマンドを使用して redis-cli プロンプトからサーバーを再起動する方法はありますか?

4

2 に答える 2

0

Itamar Haberの回答に同意します。詳細を明らかにします

サーバーの再起動後、この 'not connected>' にコマンドを入力すると、send コマンドが失敗した場合、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 が正常に再起動した後、ソケット イベントをリッスンし、ソケット接続が発生した場合、サーバーはここで接続を受け入れます

     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);
    }
}
于 2016-04-10T02:55:59.510 に答える