8.3 KiB
8.11.5 (2022-03-17)
Bug Fixes
- add missing Expire methods to Cmdable (17e3b43)
- add whitespace for avoid unlikely colisions (7f7c181)
- example/otel compile error (#2028) (187c07c)
- extra/redisotel: set span.kind attribute to client (065b200)
- format (96f53a0)
- invalid type assert in stringArg (de6c131)
- rename Golang to Go (#2030) (b82a2d9)
- set timeout for WAIT command. Fixes #1963 (333fee1)
- update some argument counts in pre-allocs (f6974eb)
Features
- Add redis v7's NX, XX, GT, LT expire variants (e19bbb2)
- add support for acl sentinel auth in universal client (ab0ccc4)
- add support for COPY command (#2016) (730afbc)
- add support for passing extra attributes added to spans (39faaa1)
- add support for time.Duration write and scan (2f1b74e)
- redisotel: ability to override TracerProvider (#1998) (bf8d4aa)
- set net.peer.name and net.peer.port in otel example (69bf454)
8.11.4 (2021-10-04)
Features
- add acl auth support for sentinels (f66582f)
- add Cmd.{String,Int,Float,Bool}Slice helpers and an example (5d3d293)
- add SetVal method for each command (168981d)
v9 UNRELEASED
- Added support for RESP3 protocol.
- Removed
Pipeline.Close
since there is no real need to explicitly manage pipeline resources.Pipeline.Discard
is still available if you want to reset commands for some reason. - Replaced
*redis.Z
withredis.Z
since it is small enough to be passed as value.
v8.11
- Remove OpenTelemetry metrics.
- Supports more redis commands and options.
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