Changelog
v1.1.0
Big fixes and improvements
- Improve handling of databases in URIs.
- Add support for ACL, introduced in Redis 6.
v1.0.0
No bug fixes or improvements. Just enough years passed for this to become 1.0.0!
v0.11.2
Bug fixes and improvements
- Fix a connection process crash that would very rarely happen when connecting to sentinel nodes with the wrong password or wrong database would fail to due a TCP/SSL connection issue.
v0.11.1
Bug fixes and improvements
- Allow
nil
as a valid value for the:password
start option again. v0.11.0 broke this feature.
v0.11.0
Breaking changes
- Use the new Telemetry event conventions for pipeline-related events. The new events are
[:redix, :pipeline, :start]
and[:redix, :pipeline, :stop]
. They both have new measurements associated with them. - Remove the
[:redix, :reconnection]
Telemetry event in favor or[:redix, :connection]
, which is emitted anytime there's a successful connection to a Redis server. - Remove support for the deprecated
`:log
start option (which was deprecated on v0.10.0). ### Bug fixes and improvements Add the:connection_metadata
name to all connection/disconnection-related Telemetry events. Allow a{module, function, arguments}
tuple as the value of the:password
start option. This is useful to avoid password leaks in case of process crashes (and crash reports). Bump minumum Elixir requirement to Elixir~> 1.7
. ## v0.10.7 ### Bug fixes and improvements Fix a crash inRedix.PubSub
when non-subscribed processes attempted to unsubscribe. ## v0.10.6 ### Bug fixes and improvements Fix a bug that caused a memory leak in some cases for Redix pub/sub connections. ## v0.10.5 ### Bug fixes and improvements Fix default option replacement for SSL in OTP 22.2. Allow:gen_statem.start_link/3,4
options inRedix.start_link/2
andRedix.PubSub.start_link/2
. Change default SSL depth from 2 to 3 (see this issue). ## v0.10.4 ### Bug fixes and improvements Fix the default Telemetry handler for Redis Sentinel events (wasn't properly fixed in v0.10.3). Fix a compile-time warning about the castore library. ## v0.10.3 ### Bug fixes and improvements Use more secure SSL default options and optionally use castore if available as a certificate store. Fix the default Telemetry handler for Redis Sentinel events. ## v0.10.2 ### Bug fixes and improvements Allow a discarded username when using Redis URIs. Fix theRedix.command/0
type which was[binary()]
but which should have been[String.Chars.t()]
since we callto_string/1
on each command. ## v0.10.1 ### Bug fixes and improvements Improve password checking in Redis URIs. Fix a bug when naming Redix connections with something other than a local name. ## v0.10.0 ### Bug fixes and improvements Add support for Telemetry and publish the following events:[:redix, :pipeline]
,[:redix, :pipeline, :error]
,[:redix, :disconnection]
,[:redix, :reconnection]
,[:redix, failed_connection]
. Deprecate the:log
option inRedix.start_link/1
andRedix.PubSub.start_link/1
in favour of Telemetry events and a default log handler that can be activated withRedix.Telemetry.attach_default_handler/0
. See the documentation forRedix.Telemetry
. This is a hard deprecation that shows a warning. Support for the:log
option will be removed in the next version. Fix a few minor bugs inRedix.PubSub
. ## v0.9.3 ### Bug fixes and improvements Fix a bug related to quickly reconnecting PIDs inRedix.PubSub
. Improve error messages here and there. ## v0.9.2 ### Bug fixes and improvements Add support for URLs with therediss
scheme. Fix a bug where we used the wrong logging level in some places. ## v0.9.1 ### Bug fixes and improvements Fix a bad return type from agen_statem
callback (#120). Improve logging for Redis Sentinel. ## v0.9.0 ### Breaking changes BringRedix.PubSub
into Redix. Pub/Sub functionality lived in a separate library, redix_pubsub. Now, that functionality has been moved into Redix. This means that if you use redixpubsub and upgrade your Redix version to 0.9, you will use the redix_pubsub version ofRedix.PubSub
. If you also upgrade your redix_pubsub version, redix_pubsub will warn and avoid compilingRedix.PubSub
so you can use the latest version in Redix. In general, if you upgrade Redix to 0.9 or later just drop the redix_pubsub dependency and make sure your application works with the latestRedix.PubSub
API (the message format changed slightly in recent versions). Add support for Redis Sentinel. Don't raiseRedix.Error
errors on non-bang variants of functions. This means that for exampleRedix.command/3
won't raise aRedix.Error
exception in case of Redis errors (like wront typing) and will return that error instead. In general, if you're pattern matching on `{:error, }to handle **connection errors** (for example, to retry after a while), now specifically match on
}. If you want to handle all possible errors the same way, keep matching on
. ### Bug fixes and improvements * Fix a bug that wouldn't let you use Redis URIs without host or port. * Don't ignore the
:timeoutoption when connecting to Redis. ## v0.8.2 ### Bug fixes and improvements * Fix an error when setting up SSL buffers (#106). ## v0.8.1 ### Bug fixes and improvements * Re-introduce
startlink/2with two lists of options, but deprecate it. It will be removed in the next Redix version. ## v0.8.0 ### Breaking changes * Drop support for Elixir < 1.6. * Unify
start_linkoptions: there's no more separation between "Redis options" and "connection options". Now, all the options are passed in together. You can still pass a Redis URI as the first argument. This is a breaking change because now calling
start_link/2with two kewyord lists breaks. Note that
start_link/2with two keyword lists still works, but emits a warning and is deprecated. ### Bug fixes and improvements * Rewrite the connection using [
gen_statem](http://erlang.org/doc/man/gen_statem.html) in order to drop the dependency to [Connection](https://github.com/fishcakez/connection). * Add
Redix.transaction_pipeline/3and
Redix.transaction_pipeline!/3. * Use a timeout when connecting to Redis (which sometimes could get stuck). * Add support for SSL 🔐 * Add
Redix.noreply_command/3and
Redix.noreply_pipeline/3(plus their bang
!variants). ## v0.7.1 * Add support for Unix domain sockets by passing
host: {:local, path}. ## v0.7.0 ### Breaking changes * Drop support for Elixir < 1.3. * Remove
Redix.format_error/1. ### Bug fixes and improvements * Add
Redix.child_spec/1for use with the child spec changes in Elixir 1.5. ## v0.6.1 * Fix some deprecation warnings around
String.to_char_list/1. ## v0.6.0 ### Breaking changes * Start using
Redix.ConnectionErrorwhen returning errors instead of just an atom. This is a breaking change since now
Redix.command/2and the other functions return
}instead of
. If you're matching on specific error reasons, make sure to update your code; if you're formatting errors through
Redix.format_error/1, you can now use
Exception.message/1on the
Redix.ConnectionErrorstructs. ## v0.5.2 * Fix some TCP error handling during the connection setup phase. ## v0.5.1 * Fix
Redix.stop/1to be synchronous and not leave zombie processes. ## v0.5.0 * Drop support for Elixir < 1.2 and OTP 17 or earlier. ## v0.4.0 * Add [@lexmag](https://github.com/lexmag) to the maintainers :tada: * Handle timeouts nicely by returning
instead of exiting (which is the default
GenServerbehaviour). * Remove support for specifying a maximum number of reconnection attempts when connecting to Redis (it was the
:max_reconnection_attemptsoption). * Use exponential backoff when reconnecting. * Don't reconnect right away after the connection to Redis is lost, but wait for a cooldown time first. * Add support for
:backoff_initialand
:backoff_maxoptions in
Redix.start_link/2. These options are used for controlling the backoff behaviour of a
Redixconnection. * Add support for the
:sync_connectoption when connecting to Redis. * Add support for the
:exit_on_disconnectionoption when connecting to Redis. * Add support for the
:logoption when connecting to Redis. * Raise
ArgumentErrorexceptions instead of
Redix.ConnectionErrorexceptions for stuff like empty commands. * Raise
Redix.Errorexceptions from
Redix.command/3instead of returning them wrapped in
{:error, }. * Expose
Redix.format_error/1. * Add a "Reconnections" page in the documentation. * Extract the Pub/Sub functionality into [a separate project](https://github.com/whatyouhide/redix_pubsub). ## v0.3.6 * Fixed a bug in the integer parsing in
Redix.Protocol. ## v0.3.5 *
Redix.Protocolnow uses continuations under the hood for a faster parsing experience. * A bug in
Redix.Protocolthat caused massive memory leaks was fixed. This bug originated upstream in Elixir itself, and I submitted a fix for it [here](https://github.com/elixir-lang/elixir/pull/4350). * Some improvements were made to error reporting in the Redix logging. ## v0.3.4 * Fix a bug in the connection that was replacing the provided Redis password with
:redactedupon successful connection, making it impossible to reconnect in case of failure (because of the original password now being unavailable). ## v0.3.3 * Fix basically the same bug that was almost fixed in
v0.3.2, but this time for real! ## v0.3.2 * Fix a bug in the protocol that failed to parse integers in some cases. ## v0.3.1 * Restructure the Redix architecture to use two Elixir processes per connection instead of one (a process that packs commands and sends them on the socket and a process that listens from the socket and replies to waiting clients); this should speed up Redix when it comes to multiple clients concurrently issueing requests to Redis. ## v0.3.0 ### Breaking changes * Change the behaviour for an empty list of command passed to
Redix.pipeline/2(
Redix.pipeline(conn, [])), which now raises a
Redix.ConnectionErrorcomplaining about the empty command. Before this release, the behaviour was just a connection timeout. * Change the behaviour of empty commands passed to
Redix.command/2or
Redix.pipeline/2(for example,
Redix.command(conn, [])or
Redix.pipeline(conn, [["PING"], []])); empty commands now return
. The previous behaviour was just a connection timeout. * Remove
Redix.start_link/1in favour of just
Redix.start_link/2: now Redis options are separated from the connection options. Redis options can be passed as a Redis URI as well. ### Bug fixes and improvements * Change the error messages for most of the
Redix.ConnectionErrorexceptions from simple atoms to more meaningful messages. ## v0.2.1 * Fix a bug with single-element lists, that were parsed as single elements (and not lists with a single element in them) by
Redix.Protocol.parse_multi/2. See [whatyouhide/redix#11](https://github.com/whatyouhide/redix/issues/11). ## v0.2.0 * Rename
Redix.NetworkErrorto
Redix.ConnectionError(as it's more generic and more flexible). * Add support for PubSub. The following functions have been added to the
Redixmodule: *
Redix.subscribe/4*
Redix.subscribe!/4*
Redix.psubscribe/4*
Redix.psubscribe!/4*
Redix.unsubscribe/4*
Redix.unsubscribe!/4*
Redix.punsubscribe/4*
Redix.punsubscribe!/4*
Redix.pubsub?/2` ## v0.1.0 Initial release.