Name | aioredis-cluster JSON |
Version |
2.7.0
JSON |
| download |
home_page | |
Summary | Redis Cluster support extension for aioredis |
upload_time | 2023-12-18 13:11:59 |
maintainer | |
docs_url | None |
author | |
requires_python | >=3.8 |
license | |
keywords |
redis
aioredis
redis cluster
asyncio
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
aioredis_cluster
================
[![PyPI version](https://img.shields.io/pypi/v/aioredis-cluster)](https://pypi.org/project/aioredis-cluster/) ![aioredis-cluster CI/CD](https://github.com/DriverX/aioredis-cluster/workflows/aioredis-cluster%20CI/CD/badge.svg)
Redis Cluster support for [aioredis](https://github.com/aio-libs/aioredis) (support only v1.x.x).
Many implementation features were inspired by [go-redis](https://github.com/go-redis/redis) project.
Requirements
------------
* [Python](https://www.python.org) 3.8+
* [async_timeout](https://pypi.org/project/async_timeout/) (only for Python < 3.11)
Features
--------
* commands execute failover (retry command on other node in cluster)
* support resharding replies ASK/MOVED
* restore cluster state from alive nodes
* one node is enough to know the topology and initialize client
* cluster state auto reload
Limitations
-----------
### Commands with limitations
* Keys in `mget`/`mset` must provide one key slot.
```python
# works
await redis.mget("key1:{foo}", "key2:{foo}")
# throw RedisClusterError
await redis.mget("key1", "key2")
```
### Commands are not supported
`Redis` methods below do not works and not supported in cluster mode implementation.
```
cluster_add_slots
cluster_count_failure_reports
cluster_count_key_in_slots
cluster_del_slots
cluster_failover
cluster_forget
cluster_get_keys_in_slots
cluster_meet
cluster_replicate
cluster_reset
cluster_save_config
cluster_set_config_epoch
cluster_setslot
cluster_readonly
cluster_readwrite
client_setname
shutdown
slaveof
script_kill
move
select
flushall
flushdb
script_load
script_flush
script_exists
scan
iscan
quit
swapdb
migrate
migrate_keys
wait
bgrewriteaof
bgsave
config_rewrite
config_set
config_resetstat
save
sync
pipeline
multi_exec
```
But you can always execute command you need on concrete node on cluster with usual `aioredis.RedisConnection`, `aioredis.ConnectionsPool` or high-level `aioredis.Redis` interfaces.
Installation
------------
```bash
pip install aioredis-cluster
```
Usage
-----
```python
import aioredis_cluster
redis = await aioredis_cluster.create_redis_cluster([
"redis://redis-cluster-node1",
])
# or
redis = await aioredis_cluster.create_redis_cluster([
"redis://redis-cluster-node1",
"redis://redis-cluster-node2",
"redis://redis-cluster-node3",
])
# or
redis = await aioredis_cluster.create_redis_cluster([
("redis-cluster-node1", 6379),
])
await redis.set("key", "value", expire=180)
redis.close()
await redis.wait_closed()
```
License
-------
The aioredis_cluster is offered under MIT license.
Changes
=======
2.7.0 (2023-12-18)
---------------------
Rework PubSub and fix race conditions ([#27](https://github.com/DriverX/aioredis-cluster/pull/27))
- add `aioredis_cluster.aioredis.stream` module
- rework PubSub command execution flow for prevent race conditions on spontaneously server channels unsubscribe push
- make fully dedicated `RedisConnection` implementation for cluster
- `RedisConnection` once entered in PubSub mode was never exit in them, because is too hard handle spontaneously unsubscribe events from Redis with simultaneously `(P|S)UNSUBSCRIBE` manually calls
- fully rewrite handling PUB/SUB replies/events
- for `Cluster`, `RedisConnection` and `ConnectionsPool` `in_pubsub` indicates flag when connector have in pubsub mode connections instead number of PUB/SUB channels
- add key slot handling for sharded PubSub channels in non-cluster dedicate `RedisConnection`
- fix and improve legacy `aioredis` tests
- improve support for py3.12
- improve support for Redis 7.2
2.6.0 (2023-11-02)
------------------
* fix stuck `aioredis.Connection` socket reader routine for sharded PUB/SUB when cluster reshard and Redis starts respond `MOVED` error on `SSUBSCRIBE` commands [#24](https://github.com/DriverX/aioredis-cluster/pull/24)
2.5.0 (2023-04-03)
------------------
* improve connection creation timeout
* do not lose connection in Pool while execute PING probe
* respect Pool.minsize in idle connections detector
* shuffle startup nodes for obtain cluster state
2.4.0 (2023-03-08)
------------------
* add support [Sharded PUB/SUB](https://redis.io/docs/manual/pubsub/#sharded-pubsub)
* new methods and properties `spublish`, `ssubscribe`, `sunsubscribe`, `pubsub_shardchannels`, `pubsub_shardnumsub`, `sharded_pubsub_channels`
* drop support Python 3.6, 3.7
* add support Python 3.11
* idle connections detection in connections pool
* change acquire connection behaviour from connection pool. Now connection acquire and release to pool by LIFO way for better idle connection detection
* deprecated `state_reload_frequency` option from `create_cluster` factory was removed
2.3.1 (2022-07-29)
------------------
* fix bypass `username` argument for pool creation
2.3.0 (2022-07-26)
------------------
* add support Redis 6 `AUTH` command with username
* factories `create_cluster`, `create_redis_cluster`, `aioredis_cluster.aioredis.create_connection` now support `username` argument
* add `auth_with_username` method for `AbcConnection`, `AbcPool` and impementations
2.2.2 (2022-07-19)
------------------
* fix problem when RedisConnection was GC collected after unhandled `asyncio.CancelledError`
* fix default `db` argument for pool/connection in cluster mode
2.2.1 (2022-07-18)
------------------
* (revert) apply cluster state only if cluster metadata is changed
2.2.0 (2022-07-18)
------------------
* fetch several cluster state candidates from cluster for choose best metadata for final local state
* apply cluster state only if cluster metadata is changed
* FIX: handle closed pubsub connection before gc its collected that trigger `Task was destroyed but it is pending!` message in log
* improve logging in state loader
2.1.0 (2022-07-10)
------------------
* fix bug when `ConnectionsPool.acquire()` is stuck because closed PUB/SUB connection is not cleanup from `used` set
* fix `ConnectionsPool.acquire()` incorrect wakeup order for connection waiters when connection is released
* `ConnectionsPool.execute()` now acquire dedicate connection for execution if command is blocking, ex. `BLPOP`
* `ConnectionsPool.execute()` now raises `ValueError` exception for PUB/SUB family command
* In `ConnectionsPool` PUB/SUB dedicated connections now is closing on `close()` call
* add `aioredis_cluster.abc.AbcConnection` abstract class
* add property `readonly` and method `set_readonly()` for `aioredis_cluster.abc.AbcConnection` and `aioredis_cluster.abc.AbcPool`
* `aioredis_cluster.Cluster` now require `pool_cls` implementation from `aioredis_cluster.abc.AbcPool`
* add `ssl` argument for factories `create_cluster`, `create_redis_cluster` and `Cluster` constructor
* add 10% jitter for cluster state auto reload interval
* fix incorrect iterate free connections in `select()`, `auth()` methods for `ConnectionsPool`
2.0.0 (2022-06-20)
------------------
* include `aioredis==1.3.1` source code into `aioredis_cluster._aioredis` and introduce `aioredis_cluster.aioredis` but for compatible and migration period
* this release have not backward incompatible changes
* __DEPRECATION WARNING:__ you must migrate from `import aioredis` to `import aioredis_cluster.aioredis` because `aioredis_cluster` starts vendorize `aioredis` package and maintain it separately. Using `aioredis` package __will be removed in v3__
* fix reacquire connection in `aioredic.ConnectionsPool` after Redis node failure
1.8.0 (2022-05-20)
------------------
* Add `xadd_620` commands method for support `XADD` options for Redis 6.2+
1.7.1 (2021-12-15)
------------------
* add `ClusterState.slots_assigned`
* require reload cluster state for some cases with `UncoveredSlotError`
1.7.0 (2021-12-15)
------------------
* add `execute_timeout` for `Manager`
* improve cluster state reload logging
* reduce number of addresses to fetch cluster state
* acquire dedicate connection from pool to fetch cluster state
* extend `ClusterState` by new attributes: `state`, `state_from`, `current_epoch`
1.6.1 (2021-11-23)
------------------
* fix keys extraction for `XREAD` and `XREADGROUP` commands
1.6.0 (2021-11-20)
------------------
* make public `Address`, `ClusterNode` and `ClusterState` structs. Available by import `from aioredis_cluster import`
* `Cluster` provides some new helpful methods:
* `get_master_node_by_keys(*keys)` - return master `ClusterNode` which contains keys `keys`
* `create_pool_by_addr(addr, **kwargs)` - create connection pool by `addr` and return pool wrapped by `commands_factory` from `Cluster` constructor. By default is `aioredis_cluster.RedisCluster` instance.
* `get_cluster_state()` - return `ClusterState` instance with recent known cluster state received from Redis cluster
* `extract_keys(command_sequence)` - returns keys of command sequence
* drop `pytest-aiohttp` plugin for tests
* add `pytest-asyncio` dependency for tests
* switch `asynctest` -> `mock` library for aio tests
* drop `attrs` dependency. For Python 3.6 you need install `dataclasses`
* fix extract keys for `BLPOP`/`BRPOP` commands
* add support keys extraction for `ZUNION`, `ZINTER`, `ZDIFF`, `ZUNIONSTORE`, `ZINTERSTORE`, `ZDIFFSTORE` commands
* acquire dedicate connection from pool for potential blocking commands like `BLPOP`, `BRPOP`, `BRPOPLPUSH`, `BLMOVE`, `BLMPOP`, `BZPOPMIN`, `BZPOPMAX`, `XREAD`, `XREADGROUP`
1.5.2 (2020-12-14)
------------------
* README update
1.5.1 (2020-12-11)
------------------
* speedup crc16. Use implementation from python stdlib
1.5.0 (2020-12-10)
------------------
* remove `state_reload_frequency` from `ClusterManager`. `state_reload_interval` now is one relevant option for state auto reload
* default `state_reload_interval` increased and now is 300 seconds (5 minutes)
* commands registry loads only once, on cluster state initialize
* improve failover. First connection problem cause retry to random slot replica
* improve python3.9 support
* default `idle_connection_timeout` now is 10 minutes
1.4.0 (2020-09-08)
------------------
* fix `aioredis.locks.Lock` issue (https://github.com/aio-libs/aioredis/pull/802, [bpo32734](https://bugs.python.org/issue32734))
* now `aioredis_cluster.Cluster` do not acquire dedicate connection for every execute
* `aioredis_cluster` now requires `python>=3.6.5`
1.3.0 (2019-10-23)
------------------
* improve compatible with Python 3.8
* improve failover logic while command timed out
* read-only commands now retries if attempt_timeout is reached
* add required dependeny `async_timeout`
* `aioredis` dependency bound now is `aioredis >=1.1.0, <2.0.0`
1.2.0 (2019-09-10)
------------------
* add timeout for command execution (per execution try)
* add Cluster option `attempt_timeout` for configure command execution timeout, default timeout is 5 seconds
* Cluster.execute_pubsub() fixes
1.1.1 (2019-06-07)
------------------
* CHANGES fix
1.1.0 (2019-06-06)
------------------
* Cluster state auto reload
* new `state_reload_frequency` option to configure state reload frequency
* new `state_reload_interval` option to configure state auto reload interval
* `follow_cluster` option enable load cluster state from previous cluster state nodes
* establish connection only for master nodes after cluster state load
* change default commands_factory to aioredis_cluster.RedisCluster instead aioredis.Redis
* all cluster info commands always returns structs with str, not bytes
* `keys_master` and `all_masters` methods now try to ensure cluster state instead simply raise exception if connection lost to cluster node, for example
* `max_attempts` always defaults fix
1.0.0 (2019-05-29)
------------------
* Library full rewrite
* Cluster state auto reload
* Command failover if cluster node is down or key slot resharded
0.2.0 (2018-12-27)
------------------
* Pipeline and MULTI/EXEC cluster implementation with keys distribution limitation (because cluster)
0.1.1 (2018-12-26)
------------------
* Python 3.6+ only
0.1.0 (2018-12-24)
------------------
* Initial release based on aioredis PR (https://github.com/aio-libs/aioredis/pull/119)
Contributors
============
* [Anton Ilyushenkov](https://github.com/DriverX)
* [Vadim Pushtaev](https://github.com/VadimPushtaev)
* [erastov](https://github.com/erastov)
* [roman901](https://github.com/roman901)
* [Alexander Malev](https://github.com/aamalev)
Raw data
{
"_id": null,
"home_page": "",
"name": "aioredis-cluster",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "Anton Ilyushenkov <ilyushenkov@corp.mail.ru>",
"keywords": "redis,aioredis,redis cluster,asyncio",
"author": "",
"author_email": "Anton Ilyushenkov <ilyushenkov@corp.mail.ru>",
"download_url": "https://files.pythonhosted.org/packages/a5/3f/4d6e03480718265bff20ab343b16fe01b366697a422bda850a4b8d50b0c4/aioredis-cluster-2.7.0.tar.gz",
"platform": "POSIX",
"description": "aioredis_cluster\n================\n\n[![PyPI version](https://img.shields.io/pypi/v/aioredis-cluster)](https://pypi.org/project/aioredis-cluster/) ![aioredis-cluster CI/CD](https://github.com/DriverX/aioredis-cluster/workflows/aioredis-cluster%20CI/CD/badge.svg)\n\nRedis Cluster support for [aioredis](https://github.com/aio-libs/aioredis) (support only v1.x.x).\n\nMany implementation features were inspired by [go-redis](https://github.com/go-redis/redis) project.\n\nRequirements\n------------\n\n* [Python](https://www.python.org) 3.8+\n* [async_timeout](https://pypi.org/project/async_timeout/) (only for Python < 3.11)\n\nFeatures\n--------\n\n* commands execute failover (retry command on other node in cluster)\n* support resharding replies ASK/MOVED\n* restore cluster state from alive nodes\n* one node is enough to know the topology and initialize client\n* cluster state auto reload\n\nLimitations\n-----------\n\n### Commands with limitations\n\n* Keys in `mget`/`mset` must provide one key slot.\n ```python\n\n # works\n await redis.mget(\"key1:{foo}\", \"key2:{foo}\")\n\n # throw RedisClusterError\n await redis.mget(\"key1\", \"key2\")\n\n ```\n\n### Commands are not supported\n\n`Redis` methods below do not works and not supported in cluster mode implementation.\n```\ncluster_add_slots\ncluster_count_failure_reports\ncluster_count_key_in_slots\ncluster_del_slots\ncluster_failover\ncluster_forget\ncluster_get_keys_in_slots\ncluster_meet\ncluster_replicate\ncluster_reset\ncluster_save_config\ncluster_set_config_epoch\ncluster_setslot\ncluster_readonly\ncluster_readwrite\nclient_setname\nshutdown\nslaveof\nscript_kill\nmove\nselect\nflushall\nflushdb\nscript_load\nscript_flush\nscript_exists\nscan\niscan\nquit\nswapdb\nmigrate\nmigrate_keys\nwait\nbgrewriteaof\nbgsave\nconfig_rewrite\nconfig_set\nconfig_resetstat\nsave\nsync\npipeline\nmulti_exec\n```\n\nBut you can always execute command you need on concrete node on cluster with usual `aioredis.RedisConnection`, `aioredis.ConnectionsPool` or high-level `aioredis.Redis` interfaces.\n\n\nInstallation\n------------\n\n```bash\n\npip install aioredis-cluster\n\n```\n\nUsage\n-----\n\n```python\n\nimport aioredis_cluster\n\nredis = await aioredis_cluster.create_redis_cluster([\n \"redis://redis-cluster-node1\",\n])\n\n# or\nredis = await aioredis_cluster.create_redis_cluster([\n \"redis://redis-cluster-node1\",\n \"redis://redis-cluster-node2\",\n \"redis://redis-cluster-node3\",\n])\n\n# or\nredis = await aioredis_cluster.create_redis_cluster([\n (\"redis-cluster-node1\", 6379),\n])\n\nawait redis.set(\"key\", \"value\", expire=180)\n\nredis.close()\nawait redis.wait_closed()\n\n```\n\nLicense\n-------\n\nThe aioredis_cluster is offered under MIT license.\n\nChanges\n=======\n\n2.7.0 (2023-12-18)\n---------------------\n\nRework PubSub and fix race conditions ([#27](https://github.com/DriverX/aioredis-cluster/pull/27))\n\n- add `aioredis_cluster.aioredis.stream` module\n- rework PubSub command execution flow for prevent race conditions on spontaneously server channels unsubscribe push\n- make fully dedicated `RedisConnection` implementation for cluster\n- `RedisConnection` once entered in PubSub mode was never exit in them, because is too hard handle spontaneously unsubscribe events from Redis with simultaneously `(P|S)UNSUBSCRIBE` manually calls\n- fully rewrite handling PUB/SUB replies/events\n- for `Cluster`, `RedisConnection` and `ConnectionsPool` `in_pubsub` indicates flag when connector have in pubsub mode connections instead number of PUB/SUB channels\n- add key slot handling for sharded PubSub channels in non-cluster dedicate `RedisConnection`\n- fix and improve legacy `aioredis` tests\n- improve support for py3.12\n- improve support for Redis 7.2\n\n2.6.0 (2023-11-02)\n------------------\n\n* fix stuck `aioredis.Connection` socket reader routine for sharded PUB/SUB when cluster reshard and Redis starts respond `MOVED` error on `SSUBSCRIBE` commands [#24](https://github.com/DriverX/aioredis-cluster/pull/24)\n\n2.5.0 (2023-04-03)\n------------------\n\n* improve connection creation timeout\n* do not lose connection in Pool while execute PING probe\n* respect Pool.minsize in idle connections detector\n* shuffle startup nodes for obtain cluster state\n\n2.4.0 (2023-03-08)\n------------------\n\n* add support [Sharded PUB/SUB](https://redis.io/docs/manual/pubsub/#sharded-pubsub)\n* new methods and properties `spublish`, `ssubscribe`, `sunsubscribe`, `pubsub_shardchannels`, `pubsub_shardnumsub`, `sharded_pubsub_channels`\n* drop support Python 3.6, 3.7\n* add support Python 3.11\n* idle connections detection in connections pool\n* change acquire connection behaviour from connection pool. Now connection acquire and release to pool by LIFO way for better idle connection detection\n* deprecated `state_reload_frequency` option from `create_cluster` factory was removed\n\n2.3.1 (2022-07-29)\n------------------\n\n* fix bypass `username` argument for pool creation\n\n2.3.0 (2022-07-26)\n------------------\n\n* add support Redis 6 `AUTH` command with username\n* factories `create_cluster`, `create_redis_cluster`, `aioredis_cluster.aioredis.create_connection` now support `username` argument\n* add `auth_with_username` method for `AbcConnection`, `AbcPool` and impementations\n\n2.2.2 (2022-07-19)\n------------------\n\n* fix problem when RedisConnection was GC collected after unhandled `asyncio.CancelledError`\n* fix default `db` argument for pool/connection in cluster mode\n\n2.2.1 (2022-07-18)\n------------------\n\n* (revert) apply cluster state only if cluster metadata is changed\n\n2.2.0 (2022-07-18)\n------------------\n\n* fetch several cluster state candidates from cluster for choose best metadata for final local state\n* apply cluster state only if cluster metadata is changed\n* FIX: handle closed pubsub connection before gc its collected that trigger `Task was destroyed but it is pending!` message in log\n* improve logging in state loader\n\n2.1.0 (2022-07-10)\n------------------\n\n* fix bug when `ConnectionsPool.acquire()` is stuck because closed PUB/SUB connection is not cleanup from `used` set\n* fix `ConnectionsPool.acquire()` incorrect wakeup order for connection waiters when connection is released\n* `ConnectionsPool.execute()` now acquire dedicate connection for execution if command is blocking, ex. `BLPOP`\n* `ConnectionsPool.execute()` now raises `ValueError` exception for PUB/SUB family command\n* In `ConnectionsPool` PUB/SUB dedicated connections now is closing on `close()` call\n* add `aioredis_cluster.abc.AbcConnection` abstract class\n* add property `readonly` and method `set_readonly()` for `aioredis_cluster.abc.AbcConnection` and `aioredis_cluster.abc.AbcPool`\n* `aioredis_cluster.Cluster` now require `pool_cls` implementation from `aioredis_cluster.abc.AbcPool`\n* add `ssl` argument for factories `create_cluster`, `create_redis_cluster` and `Cluster` constructor\n* add 10% jitter for cluster state auto reload interval\n* fix incorrect iterate free connections in `select()`, `auth()` methods for `ConnectionsPool`\n\n2.0.0 (2022-06-20)\n------------------\n\n* include `aioredis==1.3.1` source code into `aioredis_cluster._aioredis` and introduce `aioredis_cluster.aioredis` but for compatible and migration period\n* this release have not backward incompatible changes\n* __DEPRECATION WARNING:__ you must migrate from `import aioredis` to `import aioredis_cluster.aioredis` because `aioredis_cluster` starts vendorize `aioredis` package and maintain it separately. Using `aioredis` package __will be removed in v3__\n* fix reacquire connection in `aioredic.ConnectionsPool` after Redis node failure\n\n1.8.0 (2022-05-20)\n------------------\n\n* Add `xadd_620` commands method for support `XADD` options for Redis 6.2+\n\n1.7.1 (2021-12-15)\n------------------\n\n* add `ClusterState.slots_assigned`\n* require reload cluster state for some cases with `UncoveredSlotError`\n\n1.7.0 (2021-12-15)\n------------------\n\n* add `execute_timeout` for `Manager`\n* improve cluster state reload logging\n* reduce number of addresses to fetch cluster state\n* acquire dedicate connection from pool to fetch cluster state\n* extend `ClusterState` by new attributes: `state`, `state_from`, `current_epoch`\n\n1.6.1 (2021-11-23)\n------------------\n\n* fix keys extraction for `XREAD` and `XREADGROUP` commands\n\n1.6.0 (2021-11-20)\n------------------\n\n* make public `Address`, `ClusterNode` and `ClusterState` structs. Available by import `from aioredis_cluster import`\n* `Cluster` provides some new helpful methods:\n * `get_master_node_by_keys(*keys)` - return master `ClusterNode` which contains keys `keys`\n * `create_pool_by_addr(addr, **kwargs)` - create connection pool by `addr` and return pool wrapped by `commands_factory` from `Cluster` constructor. By default is `aioredis_cluster.RedisCluster` instance.\n * `get_cluster_state()` - return `ClusterState` instance with recent known cluster state received from Redis cluster\n * `extract_keys(command_sequence)` - returns keys of command sequence\n* drop `pytest-aiohttp` plugin for tests\n* add `pytest-asyncio` dependency for tests\n* switch `asynctest` -> `mock` library for aio tests\n* drop `attrs` dependency. For Python 3.6 you need install `dataclasses`\n* fix extract keys for `BLPOP`/`BRPOP` commands\n* add support keys extraction for `ZUNION`, `ZINTER`, `ZDIFF`, `ZUNIONSTORE`, `ZINTERSTORE`, `ZDIFFSTORE` commands\n* acquire dedicate connection from pool for potential blocking commands like `BLPOP`, `BRPOP`, `BRPOPLPUSH`, `BLMOVE`, `BLMPOP`, `BZPOPMIN`, `BZPOPMAX`, `XREAD`, `XREADGROUP`\n\n1.5.2 (2020-12-14)\n------------------\n\n* README update\n\n1.5.1 (2020-12-11)\n------------------\n\n* speedup crc16. Use implementation from python stdlib\n\n1.5.0 (2020-12-10)\n------------------\n\n* remove `state_reload_frequency` from `ClusterManager`. `state_reload_interval` now is one relevant option for state auto reload\n* default `state_reload_interval` increased and now is 300 seconds (5 minutes)\n* commands registry loads only once, on cluster state initialize\n* improve failover. First connection problem cause retry to random slot replica\n* improve python3.9 support\n* default `idle_connection_timeout` now is 10 minutes\n\n1.4.0 (2020-09-08)\n------------------\n\n* fix `aioredis.locks.Lock` issue (https://github.com/aio-libs/aioredis/pull/802, [bpo32734](https://bugs.python.org/issue32734))\n* now `aioredis_cluster.Cluster` do not acquire dedicate connection for every execute\n* `aioredis_cluster` now requires `python>=3.6.5`\n\n1.3.0 (2019-10-23)\n------------------\n\n* improve compatible with Python 3.8\n* improve failover logic while command timed out\n* read-only commands now retries if attempt_timeout is reached\n* add required dependeny `async_timeout`\n* `aioredis` dependency bound now is `aioredis >=1.1.0, <2.0.0`\n\n1.2.0 (2019-09-10)\n------------------\n\n* add timeout for command execution (per execution try)\n* add Cluster option `attempt_timeout` for configure command execution timeout, default timeout is 5 seconds\n* Cluster.execute_pubsub() fixes\n\n1.1.1 (2019-06-07)\n------------------\n\n* CHANGES fix\n\n1.1.0 (2019-06-06)\n------------------\n\n* Cluster state auto reload\n* new `state_reload_frequency` option to configure state reload frequency\n* new `state_reload_interval` option to configure state auto reload interval\n* `follow_cluster` option enable load cluster state from previous cluster state nodes\n* establish connection only for master nodes after cluster state load\n* change default commands_factory to aioredis_cluster.RedisCluster instead aioredis.Redis\n* all cluster info commands always returns structs with str, not bytes\n* `keys_master` and `all_masters` methods now try to ensure cluster state instead simply raise exception if connection lost to cluster node, for example\n* `max_attempts` always defaults fix\n\n1.0.0 (2019-05-29)\n------------------\n\n* Library full rewrite\n* Cluster state auto reload\n* Command failover if cluster node is down or key slot resharded\n\n0.2.0 (2018-12-27)\n------------------\n\n* Pipeline and MULTI/EXEC cluster implementation with keys distribution limitation (because cluster)\n\n0.1.1 (2018-12-26)\n------------------\n\n* Python 3.6+ only\n\n0.1.0 (2018-12-24)\n------------------\n\n* Initial release based on aioredis PR (https://github.com/aio-libs/aioredis/pull/119)\n\nContributors\n============\n\n* [Anton Ilyushenkov](https://github.com/DriverX)\n* [Vadim Pushtaev](https://github.com/VadimPushtaev)\n* [erastov](https://github.com/erastov)\n* [roman901](https://github.com/roman901)\n* [Alexander Malev](https://github.com/aamalev)\n",
"bugtrack_url": null,
"license": "",
"summary": "Redis Cluster support extension for aioredis",
"version": "2.7.0",
"project_urls": {
"Repository": "https://github.com/DriverX/aioredis-cluster"
},
"split_keywords": [
"redis",
"aioredis",
"redis cluster",
"asyncio"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "319808f0ec788a4d7ce125d5325e1fe5429abcb0106e9529ec7c8f0546776ce9",
"md5": "d5e242d4595969dd4478e5c4c651ae84",
"sha256": "7a0b807e337fda9dcdfac22b4fee9b16a41b47a8b22a8358f68524de8827e925"
},
"downloads": -1,
"filename": "aioredis_cluster-2.7.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d5e242d4595969dd4478e5c4c651ae84",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 120841,
"upload_time": "2023-12-18T13:11:58",
"upload_time_iso_8601": "2023-12-18T13:11:58.042540Z",
"url": "https://files.pythonhosted.org/packages/31/98/08f0ec788a4d7ce125d5325e1fe5429abcb0106e9529ec7c8f0546776ce9/aioredis_cluster-2.7.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a53f4d6e03480718265bff20ab343b16fe01b366697a422bda850a4b8d50b0c4",
"md5": "33352a49f745a73a53b5c6209592836d",
"sha256": "9b1bf8e9c8186d2e68a032d8693a8a35b1141a9570db9b8179ef144a318f6dad"
},
"downloads": -1,
"filename": "aioredis-cluster-2.7.0.tar.gz",
"has_sig": false,
"md5_digest": "33352a49f745a73a53b5c6209592836d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 169173,
"upload_time": "2023-12-18T13:11:59",
"upload_time_iso_8601": "2023-12-18T13:11:59.686285Z",
"url": "https://files.pythonhosted.org/packages/a5/3f/4d6e03480718265bff20ab343b16fe01b366697a422bda850a4b8d50b0c4/aioredis-cluster-2.7.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-18 13:11:59",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "DriverX",
"github_project": "aioredis-cluster",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "aioredis-cluster"
}