- Add
Config#extra
to store configuration metadata. It can be used for per server middleware configuration.
- Added instance scoped middlewares. See: #53
- Allow subclasses of accepted types as command arguments. Fix: #51
- Improve hiredis driver error messages.
- Automatically reconnect if the process was forked.
- Make the client resilient to
Timeout.timeout
orThread#kill
use (it still is very much discouraged to use either). Use of async interrupts could cause responses to be interleaved. - hiredis: handle commands returning a top-level
false
(no command does this today, but some extensions might). - Workaround a bug in Ruby 2.6 causing a crash if the
debug
gem is enabled whenredis-client
is being required. Fix: #48
- Add a
connect
interface to the instrumentation API.
- Properly parse script errors on pre 7.0 redis server.
- Fix a bug in
url
parsing conflicting with thepath
option.
- Raise a distinct
RedisClient::OutOfMemoryError
, for RedisOOM
errors. - Fix the instrumentation API to be called even for authentication commands.
- Fix
url:
configuration to accept a trailing slash.
- Fix
#pubsub
being called when reconnection is disabled (redis-rb compatibility fix).
- Sentinel config now accept a list of URLs:
RedisClient.sentinel(sentinels: %w(redis://example.com:7000 redis://example.com:7001 ..))
- Fix sentinel to not connected to s_down or o_down replicas.
- Fix
REDIS_REPLY_SET
parsing inhiredis
.
- Added
protocol: 2
options to talk with Redis 5 and older servers. - Added
_v
versions ofcall
methods to make it easier to pass commands as arrays without splating. - Fix calling
blocking_call
with a block in a pipeline. blocking_call
now raiseReadTimeoutError
if the command didn't complete in time.- Fix
blocking_call
to not respectretry_attempts
on timeout. - Stop parsing RESP3 sets as Ruby Set instances.
- Fix
SystemStackError
when parsing very large hashes. Fix: #30 hiredis
now more properly release the GVL when doing IOs.
- Fix a regression in the
scan
familly of methods, they would raise withArgumentError: can't issue an empty redis command
. Fix: #24
- Fix handling of connection URLs with empty passwords (
redis://:[email protected]
). - Handle URLs with IPv6 hosts.
- Add
RedisClient::Config#server_url
as a quick way to identify which server the client is pointing to. - Add
CommandError#command
to expose the command that caused the error. - Raise a more explicit error when connecting to older redises without RESP3 support (5.0 and older).
- Properly reject empty commands early.
- The
hiredis
driver have been moved to thehiredis-client
gem.
hiredis
is now the default driver when available.- Add
RedisClient.default_driver=
. #call
now takes an optional block to cast the return value.- Treat
#call
keyword arguments as Redis flags. - Fix
RedisClient#multi
returning some errors as values instead of raising them.
- Use a more robust way to detect the current compiler.
- Added
RedisClient.register
as a public instrumentation API. - Fix
read_timeout=
andwrite_timeout=
to apply even when the client or pool is already connected. - Properly convert DNS resolution errors into
RedisClient::ConnectionError
. Previously it would raiseSocketError
- Initial Release