Open
Description
go-redis v9 stopped supporting __redis__:invalidate
messages in pubsub channels
Expected Behavior
Pubsub allows receiving invalidate
messages from the subscription on __redis__:invalidate
channel
Current Behavior
In v9 pubsub.Receive
returns error redis: unsupported pubsub message: "invalidate"
Steps to Reproduce
The following code snippet works fine on v8 but breaks on v9
package main
import (
"context"
"fmt"
"time"
"github.com/redis/go-redis/v9"
//"github.com/go-redis/redis/v8"
)
func main() {
ctx := context.Background()
redisOptions := &redis.Options{
Addr: "localhost:6379",
OnConnect: func(ctx context.Context, cn *redis.Conn) error {
cid := cn.ClientID(ctx).Val()
return cn.Process(ctx, redis.NewBoolCmd(ctx, "CLIENT", "TRACKING", "ON", "REDIRECT", fmt.Sprintf("%v", cid), "BCAST", "PREFIX", "foo"))
},
}
rdb:= redis.NewClient(redisOptions)
pubsub := rdb.Subscribe(ctx, "__redis__:invalidate")
go func() {
defer pubsub.Close()
for {
fmt.Println("Listening...")
msg, err := pubsub.Receive(ctx)
if err != nil {
fmt.Println(err) // v9 returns error
}
fmt.Println(msg)
}
}()
time.Sleep(30 * time.Second)
}
Running this code with v8 produces the following output when issuing set foo 1
with redis-cli
Listening...
subscribe: __redis__:invalidate
Listening...
Message<__redis__:invalidate: >
Listening...
Running it with v9 produces the following output when issuing set foo 1
with redis-cli
Listening...
subscribe: __redis__:invalidate
Listening...
redis: unsupported pubsub message: "invalidate"
<nil>
Listening...
Context (Environment)
go version go1.22.6 linux/amd64
I'm implementing client-side cache invalidation (https://redis.io/docs/latest/develop/use/client-side-caching/#broadcasting-mode)