-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Open
Labels
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)
goDeni, ankush and chisenberg
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
mikhailantoshkin commentedon Aug 23, 2024
Also note: when subscribed to
__redis__:invalidate
on read-only replica, on full resynchronization the message both v9 and v8 breaks.logs from redis-cli when full resynchronization is triggered
Logs from the code example provided above for v9:
Logs for v8
goDeni commentedon Aug 29, 2024
+1 same problem
chisenberg commentedon Mar 27, 2025
+1 same problem
silasfrigo commentedon Mar 27, 2025
Up. Any news on this?
chisenberg commentedon Mar 27, 2025
I'm currently testing a fix and will submit the merge request soon.
chisenberg commentedon Mar 27, 2025
Here is the pull request: #3326