The data seems to be messed up:

127.0.0.1:6379> hello 3
1# "server" => "redis"
2# "version" => "6.2.1"
3# "proto" => (integer) 3
4# "id" => (integer) 1389
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => (empty array)
127.0.0.1:6379> client tracking on bcast prefix user: prefix home:
OK
127.0.0.1:6379> set user:100 monkey
OK
127.0.0.1:6379> set key value
1) "invalidate"
2) 1) "user:100"
127.0.0.1:6379> set user:200 cat
OK
127.0.0.1:6379> get key
OK
127.0.0.1:6379> set key new-value
1) "invalidate"
2) 1) "user:200"
127.0.0.1:6379> get key
"value"
127.0.0.1:6379> get key
OK
127.0.0.1:6379> get key
"new-value"
127.0.0.1:6379>

Comment From: huangzhw

Yes. This is really a problem. In RESP3, we can send commands and recevice in one connection. Maybe we can handle this by two different ways: * When CLIENT TRACKING is executed, we enter a specail mode like Pubsub Mode; * When read a push reply, we should read one more reply, but push reply will not be displayed real time.

Comment From: huangzhw

Sorry, I made a mistake. This really is a bug. When push message is after the reply, redis-cli can't display it correctly. If the push message is before the reply, redis-cli displays push message realtime and correctly.

Comment From: enjoy-binbin

fix it in https://github.com/redis/redis/pull/10297, see https://github.com/redis/redis/pull/9694#issuecomment-954105802 will include it in 7.0 RC2 (not release yet)

[root@binblog redis]# src/redis-cli
127.0.0.1:6379> hello 3
1# "server" => "redis"
2# "version" => "255.255.255"
3# "proto" => (integer) 3
4# "id" => (integer) 3
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => (empty array)
127.0.0.1:6379> client tracking on bcast prefix user: prefix home:
OK
127.0.0.1:6379> set user:100 monkey
OK
127.0.0.1:6379> set key value
-> invalidate: 'user:100'
OK
127.0.0.1:6379> set user:200 cat
OK
127.0.0.1:6379> get key
-> invalidate: 'user:200'
"value"
127.0.0.1:6379> set key new-value
OK
127.0.0.1:6379> get key
"new-value"
127.0.0.1:6379> get key
"new-value"
127.0.0.1:6379> get key
"new-value"
127.0.0.1:6379> ping
PONG