1
1
package redis_test
2
2
3
3
import (
4
+ "context"
4
5
"io"
5
6
"net"
6
7
"sync"
@@ -14,11 +15,16 @@ import (
14
15
15
16
var _ = Describe ("PubSub" , func () {
16
17
var client * redis.Client
18
+ var clientID int64
17
19
18
20
BeforeEach (func () {
19
21
opt := redisOptions ()
20
22
opt .MinIdleConns = 0
21
23
opt .MaxConnAge = 0
24
+ opt .OnConnect = func (ctx context.Context , cn * redis.Conn ) (err error ) {
25
+ clientID , err = cn .ClientID (ctx ).Result ()
26
+ return err
27
+ }
22
28
client = redis .NewClient (opt )
23
29
Expect (client .FlushDB (ctx ).Err ()).NotTo (HaveOccurred ())
24
30
})
@@ -415,6 +421,30 @@ var _ = Describe("PubSub", func() {
415
421
Expect (msg .Payload ).To (Equal (string (bigVal )))
416
422
})
417
423
424
+ It ("handles message payload slice with server-assisted client-size caching" , func () {
425
+ pubsub := client .Subscribe (ctx , "__redis__:invalidate" )
426
+ defer pubsub .Close ()
427
+
428
+ client2 := redis .NewClient (redisOptions ())
429
+ defer client2 .Close ()
430
+
431
+ err := client2 .Do (ctx , "CLIENT" , "TRACKING" , "on" , "REDIRECT" , clientID ).Err ()
432
+ Expect (err ).NotTo (HaveOccurred ())
433
+
434
+ err = client2 .Do (ctx , "GET" , "mykey" ).Err ()
435
+ Expect (err ).To (Equal (redis .Nil ))
436
+
437
+ err = client2 .Do (ctx , "SET" , "mykey" , "myvalue" ).Err ()
438
+ Expect (err ).NotTo (HaveOccurred ())
439
+
440
+ ch := pubsub .Channel ()
441
+
442
+ var msg * redis.Message
443
+ Eventually (ch ).Should (Receive (& msg ))
444
+ Expect (msg .Channel ).To (Equal ("__redis__:invalidate" ))
445
+ Expect (msg .PayloadSlice ).To (Equal ([]string {"mykey" }))
446
+ })
447
+
418
448
It ("supports concurrent Ping and Receive" , func () {
419
449
const N = 100
420
450
0 commit comments