Changelog from v3.0.1 and up. Prior changes don't have a changelog.
Fixed NewCluster
not returning an error if it can't connect to any of the
redis instances given. (#319)
Fix deadlock in Cluster
when using DoSecondary
. (#317)
Fix parsing for CLUSTER SLOTS
command, which changed slightly with redis
7.0. (#322)
New
PoolMaxLifetime
option for Pool
. (PR #294)Fixes And Improvements
Switched to using errors
package, rather than golang.org/x/xerrors
. (PR
#300)
Switch to using Github Actions from travis. (PR #300)
Fixed IPv6 addresses breaking Cluster
. (Issue #288)
Sentinel
's Do
. (PR #272)New
Add FallbackToUndelivered
option to StreamReaderOpts
. (PR #244)
Add ClusterOnInitAllowUnavailable
. (PR #247)
Fixes and Improvements
*interface{}
panicking. (PR #240)New
Add Tuple
type, which makes unmarshaling EXEC
and EVAL
results easier.
Add PersistentPubSubErrCh
, so that asynchronous errors within
PersistentPubSub
can be exposed to the user.
Add FlatCmd
method to EvalScript
.
Add StreamEntries
unmarshaler to make unmarshaling XREAD
and XREADGROUP
results easier.
Fixes and Improvements
Fix wrapped errors not being handled correctly by Cluster
. (PR #229)
Fix PersistentPubSub
deadlocking when a method was called after Close
.
(PR #230)
Fix StreamReader
not correctly handling the case of reading from multiple
streams when one is empty. (PR #224)
Improve docs for WithConn
and PubSubConn
.
Fix PubSubConn
's Subscribe
and PSubscribe
methods potentially mutating
the passed in array of strings. (Issue #217)
Fix StreamEntry
not properly handling unmarshaling an entry with a nil
fields array. (PR #218)
Add EmptyArray
field to MaybeNil
. (PR #211)
Fix Cluster
not properly re-initializing itself when the cluster goes
completely down. (PR #209)
Huge thank you to @nussjustin for all the work he's been doing on this project, this release is almost entirely his doing.
New
Add support for TYPE
option to Scanner
. (PR #187)
Add Sentinel.DoSecondary
method. (PR #197)
Add DialAuthUser
, to support username+password authentication. (PR #195)
Add Cluster.DoSecondary
method. (PR #198)
Fixes and Improvements
Fix pipeline behavior when a decode error is encountered. (PR #180)
Fix Reason
in PoolConnClosed
in the case of the Pool being full. (PR #186)
Refactor PersistentPubSub
to be cleaner, fixing a panic in the process.
(PR #185, Issue #184)
Fix marshaling of nil pointers in structs. (PR #192)
Wrap errors which get returned from pipeline decoding. (PR #191)
Simplify and improve pipeline error handling. (PR #190)
Dodge a []byte
allocation when in StreamReader.Next
. (PR #196)
Remove excess lock in Pool. (PR #202)
Fix alignment for atomic values in structs (PR #171)
Fix closing of sentinel instances while updating state (PR #173)
Update xerrors package (PR #165)
Have cluster Pools be closed outside of lock, to reduce contention during failover events (PR #168)
Add PersistentPubSubWithOpts
function, deprecating the old
PersistentPubSub
function. (PR #156)
Make decode errors a bit more helpful. (PR #157)
Refactor Pool to rely on its inner lock less, simplifying the code quite a bit and hopefully speeding up certain actions. (PR #160)
resp2.Error
match with a resp.ErrDiscarded
when using errors.As
.
Fixes EVAL, among probably other problems. (PR #152)Use xerrors
internally. (PR #113)
Handle unmarshal errors better. Previously an unmarshaling error could leave the connection in an inconsistent state, because the full message wouldn't get completely read off the wire. After a lot of work, this has been fixed. (PR #127, #139, #145)
Handle CLUSTERDOWN errors better. Upon seeing a CLUSTERDOWN, all commands will be delayed by a small amount of time. The delay will be stopped as soon as the first non-CLUSTERDOWN result is seen from the Cluster. The idea is that, if a failover happens, commands which are incoming will be paused long enough for the cluster to regain it sanity, thus minimizing the number of failed commands during the failover. (PR #137)
Fix cluster redirect tracing. (PR #142)
New
Add trace
package with tracing callbacks for Pool
and Cluster
.
(Sentinel
coming soon!) (PR #100, PR #108, PR #111)
Add SentinelAddrs
method to Sentinel
(PR #118)
Add DialUseTLS
option. (PR #104)
Fixes and Improvements
Fix NewSentinel
not handling URL AUTH parameters correctly (PR #120)
Change DefaultClientFunc
's pool size from 20 to 4, on account of pipelining
being enabled by default. (Issue #107)
Reuse reflect.Value
instances when unmarshaling into certain map types. (PR
#96).
Fix a panic in FlatCmd
. (PR #97)
Reuse field name string
when unmarshaling into a struct. (PR #95)
Reduce PubSub allocations significantly. (PR #92 + Issue #91)
Reduce allocations in Conn
. (PR #84)
Optimize Scanner implementation.
Fix bug with using types which implement resp.LenReader, encoding.TextMarshaler, and encoding.BinaryMarshaler. The encoder wasn't properly taking into account the interfaces when counting the number of elements in the message.
Give Pool an ErrCh so that errors which happen internally may be reported to the user, if they care.
Fix PubSubConn
's deadlock problems during Unsubscribe commands.
Small speed optimizations in network protocol code.
go.mod
a bit.Add StreamReader
type to make working with redis' new Stream
functionality easier.
Make Sentinel
properly respond to Client
method calls. Previously it
always created a new Client
instance when a secondary was requested, now it
keeps track of instances internally.
Make default Dial
call have a timeout for connect/read/write. At the same
time, normalize default timeout values across the project.
Implicitly pipeline commands in the default Pool implementation whenever possible. This gives a throughput increase of nearly 5x for a normal parallel workload.
Stub
support Pipeline
properly.