4.9 KiB
Changelog
❤️ Uptrace.dev - All-in-one tool to optimize performance and monitor errors & logs
v8.10
-
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:
- Traces become smaller and less noisy.
- It may be costly to process those 3 extra spans for each query.
- go-redis no longer depends on OpenTelemetry.
Eventually we hope to replace the information that we no longer collect with OpenTelemetry Metrics.
v8.9
- Changed
PubSub.Channel
to only rely onPing
result. You can now useWithChannelSize
,WithChannelHealthCheckInterval
, andWithChannelSendTimeout
to override default settings.
v8.8
- To make updating easier, extra modules now have the same version as go-redis does. That means that you need to update your imports:
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
v8.5
- knadh contributed long-awaited ability to scan Redis Hash into a struct:
err := rdb.HGetAll(ctx, "hash").Scan(&data)
err := rdb.MGet(ctx, "key1", "key2").Scan(&data)
v8
-
All commands require
context.Context
as a first argument, e.g.rdb.Ping(ctx)
. If you are not usingcontext.Context
yet, the simplest option is to define global package variablevar ctx = context.TODO()
and use it whenctx
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 toForEachShard
for consistency withRing
.
v7.3
- New option
Options.Username
which causes client to useAuthACL
. Be aware if your connection URL contains username.
v7.2
- Existing
HMSet
is renamed toHSet
and old deprecatedHMSet
is restored for Redis 3 users.
v7.1
- Existing
Cmd.String
is renamed toCmd.Text
. NewCmd.String
implementsfmt.Stringer
interface.
v7
- Important. Tx.Pipeline now returns a non-transactional pipeline. Use Tx.TxPipeline for a transactional pipeline.
- WrapProcess is replaced with more convenient AddHook that has access to context.Context.
- WithContext now can not be used to create a shallow copy of the client.
- New methods ProcessContext, DoContext, and ExecContext.
- Client respects Context.Deadline when setting net.Conn deadline.
- Client listens on Context.Done while waiting for a connection from the pool and returns an error when context context is cancelled.
- Add PubSub.ChannelWithSubscriptions that sends
*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 addedOptions.Limiter
instead.HMSet
is deprecated as of Redis v4.
v6.15
- Cluster and Ring pipelines process commands for each node in its own goroutine.
6.14
- Added Options.MinIdleConns.
- Added Options.MaxConnAge.
- PoolStats.FreeConns is renamed to PoolStats.IdleConns.
- Add Client.Do to simplify creating custom commands.
- Add Cmd.String, Cmd.Int, Cmd.Int64, Cmd.Uint64, Cmd.Float64, and Cmd.Bool helpers.
- Lower memory usage.
v6.13
- Ring got new options called
HashReplicas
andHash
. It is recommended to setHashReplicas = 1000
for better keys distribution between shards. - Cluster client was optimized to use much less memory when reloading cluster state.
- PubSub.ReceiveMessage is re-worked to not use ReceiveTimeout so it does not lose data when timeout occurres. In most cases it is recommended to use PubSub.Channel instead.
- Dialer.KeepAlive is set to 5 minutes by default.
v6.12
- ClusterClient got new option called
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