1.4.3 (2017-09-14)
------------------

* The internal class layout of the channel layers has been adjusted, but the
  public API remains the same.

* Fixed compatability with newer releases of redis-py.


1.4.2 (2017-06-20)
------------------

* receive() no longer blocks indefinitely, just for a while.

* Built-in lua scripts have their SHA pre-set to avoid a guaranteed cache miss
  on their first usage.


1.4.1 (2017-06-15)
------------------

* A keyspace leak has been fixed where message body keys were not deleted after
  receive, and instead left to expire.


1.4.0 (2017-05-18)
------------------

* Sharded mode support is now more robust with send/receive deterministically
  moving around the shard ring rather than picking random connections. This
  means there is no longer a slight chance of messages being missed when there
  are not significantly more readers on a channel than shards. Tests have
  also been updated so they run fully on sharded mode thanks to this.

* Sentinel support has been considerably improved, with connection caching
  (via sentinal_refresh_interval), and automatic service discovery.

* The Twisted backend now picks up the Redis password if one is configured.


1.3.0 (2017-04-07)
------------------

* Change format of connection arguments to be a single dict called
  ``connection_kwargs`` rather than individual options, as they change by
  connection type. You will need to change your settings if you have any of
  socket_connect_timeout, socket_timeout, socket_keepalive or
  socket_keepalive_options set to move them into a ``connection_kwargs`` dict.

1.2.1 (2017-04-02)
------------------

* Error with sending to multi-process channels with the same message fixed

1.2.0 (2017-04-01)
------------------

* Process-specific channel behaviour changed to match new spec
* Redis Sentinel channel layer added

1.1.0 (2017-03-18)
------------------

* Support for the ASGI statistics extension
* Distribution of items over multiple servers using consistent hashing is improved
* Handles timeout exceptions in newer redis-py library versions correctly
* Support for configuring the socket_connect_timeout, socket_timeout, socket_keepalive and socket_keepalive_options
  options that are passed to redis-py.

1.0.0 (2016-11-05)
------------------

* Renamed "receive_many" to "receive"
* Improved (more explicit) error handling for Redis errors/old versions
* Bad hosts (string not lost) configuration now errors explicitly

0.14.1 (2016-08-24)
-------------------

* Removed unused reverse channels-to-groups mapping keys as they were not
  cleaned up proactively and quickly filled up databases.

0.14.0 (2016-07-16)
-------------------

* Implemented group_channels method.

0.13.0 (2016-06-09)
-------------------

* Added local-and-remote backend option (uses asgi_ipc)

0.12.0 (2016-05-25)
-------------------

* Added symmetric encryption for messages and at-rest data with key rotation.

0.11.0 (2016-05-07)
-------------------

* Implement backpressure with per-channel and default capacities.

0.10.0 (2016-03-27)
-------------------

* Group expiry code re-added and fixed.

0.9.1 (2016-03-23)
------------------

* Remove old group expiry code that was killing groups after 60 seconds.

0.9.0 (2016-03-21)
------------------

* Connections now pooled per backend shard
* Random portion of channel names now 12 characters
* Implements new ASGI single-response-channel pattern spec

0.8.3 (2016-02-28)
------------------

* Nonblocking receive_many now uses Lua script rather than for loop.

0.8.2 (2016-02-22)
------------------

* Nonblocking receive_many now works, but is inefficient
* Python 3 fixes

0.8.1 (2016-02-22)
------------------

* Fixed packaging issues
