Removed extra OpenTelemetry spans from go-redis core. Now go-redis instrumentation only adds a single span with a Redis command (instead of 4 spans). There are multiple reasons behind this decision:
Eventually we hope to replace the information that we no longer collect with OpenTelemetry Metrics.
PubSub.Channel to only rely on Ping result. You can now use WithChannelSize, WithChannelHealthCheckInterval, and WithChannelSendTimeout to override default settings.github.com/go-redis/redis/extra/redisotel -> github.com/go-redis/redis/extra/redisotel/v8 github.com/go-redis/redis/extra/rediscensus -> github.com/go-redis/redis/extra/rediscensus/v8
err := rdb.HGetAll(ctx, "hash").Scan(&data)
err := rdb.MGet(ctx, "key1", "key2").Scan(&data)
All commands require context.Context as a first argument, e.g. rdb.Ping(ctx). If you are not using context.Context yet, the simplest option is to define global package variable var ctx = context.TODO() and use it when ctx is required.
Full support for context.Context canceling.
Added redis.NewFailoverClusterClient that supports routing read-only commands to a slave node.
Added redisext.OpenTemetryHook that adds Redis OpenTelemetry instrumentation.
Redis slow log support.
Ring uses Rendezvous Hashing by default which provides better distribution. You need to move existing keys to a new location or keys will be inaccessible / lost. To use old hashing scheme:
import "github.com/golang/groupcache/consistenthash"
ring := redis.NewRing(&redis.RingOptions{
NewConsistentHash: func() {
return consistenthash.New(100, crc32.ChecksumIEEE)
},
})
ClusterOptions.MaxRedirects default value is changed from 8 to 3.
Options.MaxRetries default value is changed from 0 to 3.
Cluster.ForEachNode is renamed to ForEachShard for consistency with Ring.
Options.Username which causes client to use AuthACL. Be aware if your connection URL contains username.HMSet is renamed to HSet and old deprecated HMSet is restored for Redis 3 users.Cmd.String is renamed to Cmd.Text. New Cmd.String implements fmt.Stringer interface.*Subscription in addition to *Message to allow detecting reconnections.time.Time is now marshalled in RFC3339 format. rdb.Get("foo").Time() helper is added to parse the time.SetLimiter is removed and added Options.Limiter instead.HMSet is deprecated as of Redis v4.HashReplicas and Hash. It is recommended to set HashReplicas = 1000 for better keys distribution between shards.ClusterSlots which allows to build cluster of normal Redis Servers that don't have cluster mode enabled. See https://godoc.org/github.com/go-redis/redis#example-NewClusterClient--ManualSetup