View Source Changelog

v1-2-0

v1.2.0

new-features

New features

  • Add :telemetry_metadata option to Redis calls. This can be used to provide custom metadata for Telemetry events.
  • Mark Redis sentinel support as not-experimental anymore.
  • Make Redix.URI part of the public API.

bug-fixes-and-improvements

Bug fixes and improvements

  • Handle Redis servers that disable the CLIENT command.
  • Bump Elixir requirement to 1.11+.

v1-1-5

v1.1.5

bug-fixes-and-improvements-1

Bug fixes and improvements

  • Fix formatting of Unix domain sockets when logging
  • Use Logger instead of IO.warn/2 when warning about ACLs, so that it can be silenced more easily.
  • Allow the :port option to be set explicitly to 0 when using Unix domain sockets
  • Support empty string as database when using Redis URIs due to changes to how URIs are handled in Elixir

v1-1-4

v1.1.4

bug-fixes-and-improvements-2

Bug fixes and improvements

  • Support version 1.0 and over for the Telemetry dependency.

v1-1-3

v1.1.3

bug-fixes-and-improvements-3

Bug fixes and improvements

  • The .formatter.exs file included in this repo had some filesystem permission problems. This version fixes those.

v1-1-2

v1.1.2

Version v1.1.1 was accidentally published with local code (from the maintainer's machine) in it instead of the code from the main Git branch. We're all humans! Version v1.1.1 has been retired.

v1-1-1

v1.1.1

bug-fixes-and-improvements-4

Bug fixes and improvements

  • Version v1.1.0 started using ACLs and issuing AUTH <username> <password> when a username was provided (either via options or via URI). This broke previous documented behavior, where Redix used to ignore usernames. With this bug fix, Redix now falls back to AUTH <password> if AUTH <username> <password> fails because of the wrong number of arguments, which indicates a version of Redis earlier than version 6 (when ACLs were introduced).

v1-1-0

v1.1.0

bug-fixes-and-improvements-5

Bug fixes and improvements

  • Improve handling of databases in URIs.
  • Add support for ACL, introduced in Redis 6.

v1-0-0

v1.0.0

No bug fixes or improvements. Just enough years passed for this to become 1.0.0!

v0-11-2

v0.11.2

bug-fixes-and-improvements-6

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

v0.11.1

bug-fixes-and-improvements-7

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

v0.11.0

breaking-changes

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 minimum Elixir requirement to Elixir ~> 1.7. ## v0.10.7 ### Bug fixes and improvements Fix a crash in Redix.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 in Redix.start_link/2 and Redix.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 the Redix.command/0 type which was [binary()] but which should have been [String.Chars.t()] since we call to_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 in Redix.start_link/1 and Redix.PubSub.start_link/1 in favour of Telemetry events and a default log handler that can be activated with Redix.Telemetry.attach_default_handler/0. See the documentation for Redix.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 in Redix.PubSub. ## v0.9.3 ### Bug fixes and improvements Fix a bug related to quickly reconnecting PIDs in Redix.PubSub. Improve error messages here and there. ## v0.9.2 ### Bug fixes and improvements Add support for URLs with the rediss 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 a gen_statem callback (#120). Improve logging for Redis Sentinel. ## v0.9.0 ### Breaking changes Bring Redix.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 of Redix.PubSub. If you also upgrade your redix_pubsub version, redix_pubsub will warn and avoid compiling Redix.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 latest Redix.PubSub API (the message format changed slightly in recent versions). Add support for Redis Sentinel. Don't raise Redix.Error errors on non-bang variants of functions. This means that for example Redix.command/3 won't raise a Redix.Error exception in case of Redis errors (like wrong 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-introducestartlink/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. * Unifystart_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 callingstart_link/2with two kewyord lists breaks. Note thatstart_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). * AddRedix.transaction_pipeline/3andRedix.transaction_pipeline!/3. * Use a timeout when connecting to Redis (which sometimes could get stuck). * Add support for SSL 🔐 * AddRedix.noreply_command/3andRedix.noreply_pipeline/3(plus their bang!variants). ## v0.7.1 * Add support for Unix domain sockets by passinghost: {:local, path}. ## v0.7.0 ### Breaking changes * Drop support for Elixir < 1.3. * RemoveRedix.format_error/1. ### Bug fixes and improvements * AddRedix.child_spec/1for use with the child spec changes in Elixir 1.5. ## v0.6.1 * Fix some deprecation warnings aroundString.to_char_list/1. ## v0.6.0 ### Breaking changes * Start usingRedix.ConnectionErrorwhen returning errors instead of just an atom. This is a breaking change since nowRedix.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 throughRedix.format_error/1, you can now useException.message/1on theRedix.ConnectionErrorstructs. ## v0.5.2 * Fix some TCP error handling during the connection setup phase. ## v0.5.1 * FixRedix.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 returninginstead of exiting (which is the defaultGenServerbehaviour). * 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 inRedix.start_link/2. These options are used for controlling the backoff behaviour of aRedixconnection. * 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. * RaiseArgumentErrorexceptions instead ofRedix.ConnectionErrorexceptions for stuff like empty commands. * RaiseRedix.Errorexceptions fromRedix.command/3instead of returning them wrapped in{:error, }. * ExposeRedix.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 inRedix.Protocol. ## v0.3.5 *Redix.Protocolnow uses continuations under the hood for a faster parsing experience. * A bug inRedix.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 inv0.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 issuing requests to Redis. ## v0.3.0 ### Breaking changes * Change the behaviour for an empty list of command passed toRedix.pipeline/2(Redix.pipeline(conn, [])), which now raises aRedix.ConnectionErrorcomplaining about the empty command. Before this release, the behaviour was just a connection timeout. * Change the behaviour of empty commands passed toRedix.command/2orRedix.pipeline/2(for example,Redix.command(conn, [])orRedix.pipeline(conn, [["PING"], []])); empty commands now return. The previous behaviour was just a connection timeout. * RemoveRedix.start_link/1in favour of justRedix.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 theRedix.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) byRedix.Protocol.parse_multi/2. See [whatyouhide/redix#11](https://github.com/whatyouhide/redix/issues/11). ## v0.2.0 * RenameRedix.NetworkErrortoRedix.ConnectionError(as it's more generic and more flexible). * Add support for PubSub. The following functions have been added to theRedixmodule: *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.