redisでコマンドを実行しようとしましたが、応答を気にせず、ネットワークトラフィックを最小限に抑えたくありません. stackoverflow に関する1 つの回答は、何も返さない Lua スクリプトがそれを達成するのに役立つ可能性があると述べましたが、redis-cli で試してパッケージをスニッフィングすると、クライアントとサーバー間で同じ数のパッケージが転送されます。何も返さないか、整数 1 を返すスクリプト。
クエリの例は次のとおりです。
- EVAL "" 0
- EVAL "リターン 1" 0
どちらの場合も、wireshark は交換された 4 つのパッケージを示しています。1 つの [PSH, ACK] クライアントからサーバーへ、[ACK] サーバーからクライアントへ、[PSH, ACK] サーバーからクライアントへ、[ACK] をクライアントからサーバーへ。最初のケースでは、redis からの応答であると予想される [PSH, ACK] パッケージには、次のデータが含まれています。
0000 02 00 00 00 45 00 00 39 bc a8 40 00 40 06 00 00 ....E..9 ..@.@...
0010 7f 00 00 01 7f 00 00 01 18 eb e6 bb 03 4d 7c 9c ........ .....M|.
0020 e2 97 bf 53 80 18 23 df fe 2d 00 00 01 01 08 0a ...S..#. .-......
0030 11 cd c0 31 11 cd c0 31 24 2d 31 0d 0a ...1...1 $-1..
2 番目のケースでは、このパッケージには以下が含まれます。
0000 02 00 00 00 45 00 00 38 fa 9f 40 00 40 06 00 00 ....E..8 ..@.@...
0010 7f 00 00 01 7f 00 00 01 18 eb e6 bb 03 4d 7c a1 ........ .....M|.
0020 e2 97 bf 76 80 18 23 dd fe 2c 00 00 01 01 08 0a ...v..#. .,......
0030 11 ce be 46 11 ce be 46 3a 31 0d 0a ...F...F :1..
2 番目のケースでは、要点は明らかです。:1 は 1 に対する整数の応答です。しかし、最初のケースではよくわかりません。$ は一括返信のインジケーターで、- はエラーのインジケーターです。これは、$-1 が redis-cli に表示されている (nil) のデータであることを意味しますか? それとも私はそこで完全に間違っていますか?そして、私が正しければ、(コマンドの ACK を除いて) 応答がまったく必要ないことを redis に伝える可能性はありますか? それとも、redis コードをフォークして自分で実装する必要がありますか?
redis のソース コードを掘り下げずに、まったく応答がないことを達成する方法についてのヒントを本当に感謝しています。