我尝试在 redis 上执行命令,但不关心任何响应,甚至不希望任何最小化网络流量。stackoverflow 上的一个答案说一个不返回任何内容的 Lua 脚本可以帮助实现这一点,但是当我在 redis-cli 上尝试它并嗅探我的包时,无论我有没有在客户端和服务器之间传输相同数量的包不返回任何内容或返回整数 1 的脚本。
示例查询是:
- 评估“”0
- 评估“返回 1”0
在这两种情况下,wireshark 都显示交换了 4 个包。一个 [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..
在第二种情况下,这个包包含:
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..
对于第二种情况,这一点很清楚。:1 是 1 的整数回复。但对于第一种情况,我不确定。$ 是批量回复的指标和 - 错误的指标。这是否意味着 $-1 是 redis-cli 中显示的 (nil) 的数据?还是我在那里完全错了?如果我是对的,是否有可能告诉 redis 我根本不想要任何响应(命令的 ACK 除外)?还是我必须分叉 redis 代码并自己实现它?
我真的很感激任何关于如何在不深入研究 redis 源代码的情况下完全没有响应的提示。