The repository now lives at https://github.com/redis/redis-rb. Thanks, Ezra!
Redis.currentis now thread unsafe, because the client itself is thread safe.
In the future you'll be able to do something like:
Redis.current = Redis::Pool.connect
Redis.currentactually usable in multi-threaded environments, while not affecting those running a single thread.
Change API for
BRPOPnow take a single argument equal to a string key, or an array with string keys, followed by an optional hash with a
BRPOPLPUSHalso takes an optional hash with a
:timeoutkey as last argument for consistency. By default, these commands use a timeout of
0to not time out.
SORTis passed multiple key patterns to get via the
:getoption, it now returns an array per result element, holding all
MSETNXcommand now returns a boolean.
ZREVRANGEBYSCOREcommands now return an array containing
[String, Float]pairs when
:with_scores => trueis passed.
ZSCOREcommands now return a
Floatscore instead of a string holding a representation of the score.
The client now raises custom exceptions where it makes sense.
If by any chance you were rescuing low-level exceptions (
Errno::*), you should now rescue as follows:
Errno::ECONNRESET -> Redis::ConnectionError Errno::EPIPE -> Redis::ConnectionError Errno::ECONNABORTED -> Redis::ConnectionError Errno::EBADF -> Redis::ConnectionError Errno::EINVAL -> Redis::ConnectionError Errno::EAGAIN -> Redis::TimeoutError Errno::ECONNREFUSED -> Redis::CannotConnectError
Always raise exceptions originating from erroneous command invocation inside pipelines and MULTI/EXEC blocks.
The old behavior (swallowing exceptions) could cause application bugs to go unnoticed.
Implement futures for assigning values inside pipelines and MULTI/EXEC blocks. Futures are assigned their value after the pipeline or MULTI/EXEC block has executed.
$redis.pipelined do @future = $redis.get "key" end puts @future.value
Ruby 1.8.6 is officially not supported.
Pipelined commands now return the same replies as when called outside a pipeline.
In the past, pipelined replies were returned without post-processing.
SLOWLOGcommand (Michael Bernstein).
SHUTDOWNeffectively disconnects the client (Stefan Kaes).
Basic support for mapping commands so that they can be renamed on the server.
Connecting using a URL now checks that a host is given.
It's just a small sanity check, cf. #126
Support variadic commands introduced in Redis 2.4.
- Added method
Internal API: Client#call and family are now called with a single array argument, since splatting a large number of arguments (100K+) results in a stack overflow on 1.9.2.
INFOcommand can optionally take a subcommand. When the subcommand is
COMMANDSTATS, the client will properly format the returned statistics per command. Subcommands for
INFOare available since Redis v2.3.0 (unstable).
IO#syswriteback to the buffered
IO#writesince some Rubies do short writes for large (1MB+) buffers and some don't (see issue #108).
Redis#without_reconnectthat ensures the client will not try to reconnect when running the code inside the specified block.
Thread-safe by default. Thread safety can be explicitly disabled by passing
:thread_safe => falseas argument.
Commands called inside a MULTI/EXEC no longer raise error replies, since a successful EXEC means the commands inside the block were executed.
MULTI/EXEC blocks are pipelined.
Don't disconnect on error replies.
IO#writebecause write buffering is not necessary.
Connect to a unix socket by passing the
:pathoption as argument.
The timeout value is coerced into a float, allowing sub-second timeouts.
:withscoresas argument to sorted set commands.
Use hiredis (v0.3 or higher) by requiring "redis/connection/hiredis".
Use em-synchrony by requiring "redis/connection/synchrony".
See commit log.