Aioredis Documentation: Release 1.3.0
Aioredis Documentation: Release 1.3.0
Aioredis Documentation: Release 1.3.0
Release 1.3.0
Alexey Popravka
1 Features 3
2 Installation 5
3 Requirements 7
4 Benchmarks 9
5 Contribute 11
6 License 13
7 Contents 15
7.1 Getting started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.1.2 Connecting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.1.3 Result messages decoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7.1.4 Multi/Exec transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
7.1.5 Pub/Sub mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
7.1.6 Sentinel client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.2 aioredis — API Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.2.1 Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.2.2 Connections Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.2.3 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
7.2.4 Pub/Sub Channel object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7.2.5 Commands Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.3 aioredis.Redis — Commands Mixins Reference . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.3.1 Generic commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.3.2 Geo commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.3.3 Strings commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.3.4 Hash commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.3.5 List commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.3.6 Set commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7.3.7 Sorted Set commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.3.8 Server commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.3.9 HyperLogLog commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.3.10 Transaction commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.3.11 Scripting commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.3.12 Server commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.3.13 Pub/Sub commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.3.14 Cluster commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
i
7.3.15 Streams commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.4 aioredis.abc — Interfaces Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.5 aioredis.pubsub — Pub/Sub Tools Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.6 aioredis.sentinel — Sentinel Client Reference . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.6.1 RedisSentinel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.6.2 SentinelPool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.7 Examples of aioredis usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.7.1 Commands example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.7.2 Transaction example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.7.3 Pub/Sub example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.7.4 Scan command example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.7.5 Sentinel client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.7.6 Low-level connection usage example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.7.7 Connections pool example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.8 Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.8.1 Code style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.8.2 Running tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.8.3 Writing tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.9 Migrating from v0.3 to v1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.9.1 aioredis.create_pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.9.2 aioredis.create_reconnecting_redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.9.3 aioredis.Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.9.4 Blocking operations and connection sharing . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.9.5 Sorted set commands return values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.9.6 Hash hscan command now returns list of tuples . . . . . . . . . . . . . . . . . . . . . . . 72
7.10 Releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.10.1 1.3.0 (2019-09-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.10.2 1.2.0 (2018-10-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.10.3 1.1.0 (2018-02-16) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.10.4 1.0.0 (2017-11-17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.10.5 0.3.5 (2017-11-08) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.10.6 0.3.4 (2017-10-25) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.10.7 0.3.3 (2017-06-30) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.10.8 0.3.2 (2017-06-21) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.10.9 0.3.1 (2017-05-09) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.10.10 0.3.0 (2017-01-11) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.10.11 0.2.9 (2016-10-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.10.12 0.2.8 (2016-07-22) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.10.13 0.2.7 (2016-05-27) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.10.14 0.2.6 (2016-03-30) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.10.15 0.2.5 (2016-03-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.10.16 0.2.4 (2015-10-13) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
7.10.17 0.2.3 (2015-08-14) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
7.10.18 0.2.2 (2015-07-07) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
7.10.19 0.2.1 (2015-07-06) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.10.20 0.2.0 (2015-06-04) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.10.21 0.1.5 (2014-12-09) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.10.22 0.1.4 (2014-09-22) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.10.23 0.1.3 (2014-08-08) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.10.24 0.1.2 (2014-07-31) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
7.10.25 0.1.1 (2014-07-07) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
7.10.26 0.1.0 (2014-06-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
7.11 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
ii
8 Indices and tables 81
Index 85
iii
iv
aioredis Documentation, Release 1.3.0
CONTENTS 1
aioredis Documentation, Release 1.3.0
2 CONTENTS
CHAPTER
ONE
FEATURES
3
aioredis Documentation, Release 1.3.0
4 Chapter 1. Features
CHAPTER
TWO
INSTALLATION
5
aioredis Documentation, Release 1.3.0
6 Chapter 2. Installation
CHAPTER
THREE
REQUIREMENTS
• Python 3.5.3+
• hiredis
7
aioredis Documentation, Release 1.3.0
8 Chapter 3. Requirements
CHAPTER
FOUR
BENCHMARKS
9
aioredis Documentation, Release 1.3.0
10 Chapter 4. Benchmarks
CHAPTER
FIVE
CONTRIBUTE
11
aioredis Documentation, Release 1.3.0
12 Chapter 5. Contribute
CHAPTER
SIX
LICENSE
13
aioredis Documentation, Release 1.3.0
14 Chapter 6. License
CHAPTER
SEVEN
CONTENTS
7.1.1 Installation
Without dependencies
In some cases1 you might need to install aioredis without hiredis, it is achievable with the following command:
7.1.2 Connecting
import asyncio
import aioredis
15
aioredis Documentation, Release 1.3.0
asyncio.run(main())
aioredis.create_redis_pool() creates a Redis client backed by a pool of connections. The only required
argument is the address of Redis server. Redis server address can be either host and port tuple (ex: ('localhost',
6379)), or a string which will be parsed into TCP or UNIX socket address (ex: 'unix://var/run/redis.
sock', '//var/run/redis.sock', redis://redis-host-or-ip:6379/1).
Closing the client. Calling redis.close() and then redis.wait_closed() is strongly encouraged as this
will methods will shutdown all open connections and cleanup resources.
See the commands reference for the full list of supported commands.
Connecting to specific DB
There are several ways you can specify database index to select on connection:
1. explicitly pass db index as db argument:
Note: DB index specified in URI will take precedence over db keyword argument.
Note: Password specified in URI will take precedence over password keyword.
Also specifying both password as authentication component and query parameter in URI is forbidden.
16 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
By default aioredis will return bytes for most Redis commands that return string replies. Redis error replies are
known to be valid UTF-8 strings so error messages are decoded automatically.
If you know that data in Redis is valid string you can tell aioredis to decode result by passing keyword-only
argument encoding in a command call:
get source code
import asyncio
import aioredis
redis.close()
await redis.wait_closed()
asyncio.run(main())
aioredis can decode messages for all Redis data types like lists, hashes, sorted sets, etc:
get source code
import asyncio
import aioredis
await redis.hmset_dict('hash',
key1='value1',
key2='value2',
key3=123)
asyncio.run(main())
import asyncio
import aioredis
tr = redis.multi_exec()
tr.set('key1', 'value1')
tr.set('key2', 'value2')
ok1, ok2 = await tr.execute()
assert ok1
assert ok2
asyncio.run(main())
multi_exec() method creates and returns new MultiExec object which is used for buffering commands and
then executing them inside MULTI/EXEC block.
Warning: It is very important not to await buffered command (ie tr.set('foo', '123')) as it will block
forever.
The following code will block forever:
tr = redis.multi_exec()
await tr.incr('foo') # that's all. we've stuck!
import asyncio
import aioredis
18 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
redis.close()
await redis.wait_closed()
asyncio.run(main())
import asyncio
import aioredis
redis.close()
await redis.wait_closed()
asyncio.run(main())
import asyncio
import aioredis
(continues on next page)
asyncio.run(main())
Sentinel client requires a list of Redis Sentinel addresses to connect to and start discovering services.
Calling master_for() or slave_for() methods will return Redis clients connected to specified services moni-
tored by Sentinel.
Sentinel client will detect failover and reconnect Redis clients automatically.
See detailed reference here
7.2.1 Connection
Redis Connection is the core function of the library. Connection instances can be used as is or through pool or high-
level API.
Connection usage is as simple as:
import asyncio
import aioredis
asyncio.get_event_loop().run_until_complete(connect_tcp())
asyncio.get_event_loop().run_until_complete(connect_unixsocket())
20 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
pubsub_channels
Read-only dict with subscribed channels. Keys are bytes, values are Channel instances.
pubsub_patterns
Read-only dict with subscribed patterns. Keys are bytes, values are Channel instances.
in_pubsub
Indicates that connection is in PUB/SUB mode. Provides the number of subscribed channels. Read-only.
execute(command, *args, encoding=_NOTSET)
Execute Redis command.
The method is not a coroutine itself but instead it writes to underlying transport and returns a asyncio.
Future waiting for result.
Parameters
• command (str, bytes, bytearray) – Command to execute
• encoding (str or None) – Keyword-only argument for overriding response decod-
ing. By default will use connection-wide encoding. May be set to None to skip response
decoding.
Raises
• TypeError – When any of arguments is None or can not be encoded as bytes.
• aioredis.ReplyError – For redis error replies.
• aioredis.ProtocolError – When response can not be decoded and/or connection
is broken.
Returns Returns bytes or int reply (or str if encoding was set)
execute_pubsub(command, *channels_or_patterns)
Method to execute Pub/Sub commands. The method is not a coroutine itself but returns a asyncio.
gather() coroutine. Method also accept aioredis.Channel instances as command arguments:
>>> ch1 = Channel('A', is_pattern=False, loop=loop)
>>> await conn.execute_pubsub('subscribe', ch1)
[[b'subscribe', b'A', 1]]
close()
Closes connection.
Mark connection as closed and schedule cleanup procedure.
All pending commands will be canceled with ConnectionForcedCloseError.
22 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
wait_closed()
Coroutine waiting for connection to get closed.
select(db)
Changes current db index to new one.
Parameters db (int) – New redis database index.
Raises
• TypeError – When db parameter is not int.
• ValueError – When db parameter is less than 0.
Return True Always returns True or raises exception.
auth(password)
Send AUTH command.
Parameters password (str) – Plain-text password
Return bool True if redis replied with ‘OK’.
import aioredis
24 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
execute_pubsub(command, *channels)
Execute Redis (p)subscribe/(p)unsubscribe command.
ConnectionsPool picks separate free connection for pub/sub and uses it until pool is closed or con-
nection is disconnected (unsubscribing from all channels/pattern will leave connection locked for pub/sub
use).
There is no auto-reconnect for Pub/Sub connection as this will hide from user messages loss.
Has similar to execute() behavior, ie: tries to pick free connection from pool and switch it to pub/sub
mode; or fallback to coroutine waiting for free connection and repeating operation.
New in version v1.0.
get_connection(command, args=())
Gets free connection from pool returning tuple of (connection, address).
If no free connection is found – None is returned in place of connection.
Return type tuple(RedisConnection or None, str)
New in version v1.0.
coroutine clear()
Closes and removes all free connections in the pool.
coroutine select(db)
Changes db index for all free connections in the pool.
Parameters db (int) – New database index.
coroutine acquire(command=None, args=())
Acquires a connection from free pool. Creates new connection if needed.
Parameters
• command – reserved for future.
• args – reserved for future.
Raises aioredis.PoolClosedError – if pool is already closed
release(conn)
Returns used connection back into pool.
When returned connection has db index that differs from one in pool the connection will be dropped. When
queue of free connections is full the connection will be dropped.
close()
Close all free and in-progress connections and mark pool as closed.
New in version v0.2.8.
coroutine wait_closed()
Wait until pool gets closed (when all connections are closed).
New in version v0.2.8.
7.2.3 Exceptions
exception aioredis.RedisError
Bases Exception
Base exception class for aioredis exceptions.
exception aioredis.ProtocolError
Bases RedisError
Raised when protocol error occurs. When this type of exception is raised connection must be considered broken
and must be closed.
exception aioredis.ReplyError
Bases RedisError
Raised for Redis error replies.
exception aioredis.MaxClientsError
Bases ReplyError
Raised when maximum number of clients has been reached (Redis server configured value).
exception aioredis.AuthError
Bases ReplyError
Raised when authentication errors occur.
exception aioredis.ConnectionClosedError
Bases RedisError
Raised if connection to server was lost/closed.
exception aioredis.ConnectionForcedCloseError
Bases ConnectionClosedError
Raised if connection was closed with RedisConnection.close() method.
exception aioredis.PipelineError
Bases RedisError
Raised from pipeline() if any pipelined command raised error.
exception aioredis.MultiExecError
Bases PipelineError
Same as PipelineError but raised when executing multi_exec block.
exception aioredis.WatchVariableError
Bases MultiExecError
Raised if watched variable changed (EXEC returns None). Subclass of MultiExecError.
exception aioredis.ChannelClosedError
Bases RedisError
Raised from aioredis.Channel.get() when Pub/Sub channel is unsubscribed and messages queue is
empty.
26 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
exception aioredis.PoolClosedError
Bases RedisError
Raised from aioredis.ConnectionsPool.acquire() when pool is already closed.
exception aioredis.ReadOnlyError
Bases RedisError
Raised from slave when read-only mode is enabled.
exception aioredis.MasterNotFoundError
Bases RedisError
Raised by Sentinel client if it can not find requested master.
exception aioredis.SlaveNotFoundError
Bases RedisError
Raised by Sentinel client if it can not find requested slave.
exception aioredis.MasterReplyError
Bases RedisError
Raised if establishing connection to master failed with RedisError, for instance because of required or wrong
authentication.
exception aioredis.SlaveReplyError
Bases RedisError
Raised if establishing connection to slave failed with RedisError, for instance because of required or wrong
authentication.
Exceptions Hierarchy
Exception
RedisError
ProtocolError
ReplyError
MaxClientsError
AuthError
PipelineError
MultiExecError
WatchVariableError
ChannelClosedError
ConnectionClosedError
ConnectionForcedCloseError
PoolClosedError
ReadOnlyError
MasterNotFoundError
SlaveNotFoundError
MasterReplyError
SlaveReplyError
Channel object is a wrapper around queue for storing received pub/sub messages.
class aioredis.Channel(name, is_pattern, loop=None)
Bases: abc.AbcChannel
Object representing Pub/Sub messages queue. It’s basically a wrapper around asyncio.Queue.
name
Holds encoded channel/pattern name.
is_pattern
Set to True for pattern channels.
is_active
Set to True if there are messages in queue and connection is still subscribed to this channel.
coroutine get(*, encoding=None, decoder=None)
Coroutine that waits for and returns a message.
Return value is message received or None signifying that channel has been unsubscribed and no more
messages will be received.
Parameters
• encoding (str) – If not None used to decode resulting bytes message.
• decoder (callable) – If specified used to decode message, ex. json.loads()
Raises aioredis.ChannelClosedError – If channel is unsubscribed and has no more
messages.
get_json(*, encoding="utf-8")
Shortcut to get(encoding="utf-8", decoder=json.loads)
coroutine wait_message()
Waits for message to become available in channel or channel is closed (unsubscribed).
Main idea is to use it in loops:
>>> ch = redis.channels['channel:1']
>>> while await ch.wait_message():
... msg = await ch.get()
28 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
The library provides high-level API implementing simple interface to Redis commands.
The usage is as simple as:
import aioredis
30 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
class aioredis.commands.GenericCommandsMixin
Generic commands mixin.
For commands details see: http://redis.io/commands/#generic
delete(key, *keys)
Delete a key.
dump(key)
Dump a key.
exists(key, *keys)
Check if key(s) exists.
Changed in version v0.2.9: Accept multiple keys; return type changed from bool to int.
expire(key, timeout)
Set a timeout on key.
if timeout is float it will be multiplied by 1000 coerced to int and passed to pexpire method.
Otherwise raises TypeError if timeout argument is not int.
expireat(key, timestamp)
Set expire timestamp on a key.
if timeout is float it will be multiplied by 1000 coerced to int and passed to pexpireat method.
Otherwise raises TypeError if timestamp argument is not int.
iscan(*, match=None, count=None)
Incrementally iterate the keys space using async for.
Usage example:
32 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
persist(key)
Remove the existing timeout on key.
pexpire(key, timeout)
Set a milliseconds timeout on key.
Raises TypeError – if timeout is not int
pexpireat(key, timestamp)
Set expire timestamp on key, timestamp in milliseconds.
Raises TypeError – if timeout is not int
pttl(key)
Returns time-to-live for a key, in milliseconds.
Special return values (starting with Redis 2.8):
• command returns -2 if the key does not exist.
• command returns -1 if the key exists but has no associated expire.
randomkey(*, encoding=<object object>)
Return a random key from the currently selected database.
rename(key, newkey)
Renames key to newkey.
Raises ValueError – if key == newkey
renamenx(key, newkey)
Renames key to newkey only if newkey does not exist.
Raises ValueError – if key == newkey
restore(key, ttl, value)
Creates a key associated with a value that is obtained via DUMP.
scan(cursor=0, match=None, count=None)
Incrementally iterate the keys space.
Usage example:
type(key)
Returns the string representation of the value’s type stored at key.
unlink(key, *keys)
Delete a key asynchronously in another thread.
wait(numslaves, timeout)
Wait for the synchronous replication of all the write commands sent in the context of the current connec-
tion.
Raises
• TypeError – radius is not float or int
34 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
Raises
• TypeError – radius is not float or int
• TypeError – count is not int
• ValueError – if unit not equal m, km, mi or ft
• ValueError – if sort not equal ASC or DESC
Return type list[str] or list[GeoMember]
• hash (None or int) – Geo-hash represented as number. None if with_hash was not
in georadius() call.
• coord (None or GeoPoint) – Coordinate of geospatial index member. None if
with_coord was not set in georadius() call.
class aioredis.commands.StringCommandsMixin
String commands mixin.
For commands details see: http://redis.io/commands/#string
append(key, value)
Append a value to key.
bitcount(key, start=None, end=None)
Count set bits in a string.
Raises TypeError – if only start or end specified.
bitop_and(dest, key, *keys)
Perform bitwise AND operations between strings.
bitop_not(dest, key)
Perform bitwise NOT operations between strings.
bitop_or(dest, key, *keys)
Perform bitwise OR operations between strings.
bitop_xor(dest, key, *keys)
Perform bitwise XOR operations between strings.
bitpos(key, bit, start=None, end=None)
Find first bit set or clear in a string.
Raises ValueError – if bit is not 0 or 1
decr(key)
Decrement the integer value of a key by one.
decrby(key, decrement)
Decrement the integer value of a key by the given number.
Raises TypeError – if decrement is not int
get(key, *, encoding=<object object>)
Get the value of a key.
getbit(key, offset)
Returns the bit value at offset in the string value stored at key.
Raises
• TypeError – if offset is not int
• ValueError – if offset is less than 0
getrange(key, start, end, *, encoding=<object object>)
Get a substring of the string stored at a key.
Raises TypeError – if start or end is not int
36 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
class aioredis.commands.HashCommandsMixin
Hash commands mixin.
For commands details see: http://redis.io/commands#hash
hdel(key, field, *fields)
Delete one or more hash fields.
hexists(key, field)
Determine if hash field exists.
hget(key, field, *, encoding=<object object>)
Get the value of a hash field.
hgetall(key, *, encoding=<object object>)
Get all the fields and values in a hash.
hincrby(key, field, increment=1)
Increment the integer value of a hash field by the given number.
hincrbyfloat(key, field, increment=1.0)
Increment the float value of a hash field by the given number.
hkeys(key, *, encoding=<object object>)
Get all the fields in a hash.
hlen(key)
Get the number of fields in a hash.
hmget(key, field, *fields, encoding=<object object>)
Get the values of all the given fields.
hmset(key, field, value, *pairs)
Set multiple hash fields to multiple values.
hmset_dict(key, *args, **kwargs)
Set multiple hash fields to multiple values.
dict can be passed as first positional argument:
38 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
Note: dict and kwargs not get mixed into single dictionary, if both specified and both have same
key(s) – kwargs will win:
class aioredis.commands.ListCommandsMixin
List commands mixin.
For commands details see: http://redis.io/commands#list
blpop(key, *keys, timeout=0, encoding=<object object>)
Remove and get the first element in a list, or block until one is available.
Raises
• TypeError – if timeout is not int
• ValueError – if timeout is less than 0
brpop(key, *keys, timeout=0, encoding=<object object>)
Remove and get the last element in a list, or block until one is available.
Raises
• TypeError – if timeout is not int
• ValueError – if timeout is less than 0
brpoplpush(sourcekey, destkey, timeout=0, encoding=<object object>)
Remove and get the last element in a list, or block until one is available.
Raises
class aioredis.commands.SetCommandsMixin
Set commands mixin.
For commands details see: http://redis.io/commands#set
40 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
class aioredis.commands.SortedSetCommandsMixin
Sorted Sets commands mixin.
For commands details see: http://redis.io/commands/#sorted_set
bzpopmax(key, *keys, timeout=0, encoding=<object object>)
Remove and get an element with the highest score in the sorted set, or block until one is available.
Raises
• TypeError – if timeout is not int
• ValueError – if timeout is less than 0
bzpopmin(key, *keys, timeout=0, encoding=<object object>)
Remove and get an element with the lowest score in the sorted set, or block until one is available.
Raises
• TypeError – if timeout is not int
• ValueError – if timeout is less than 0
izscan(key, *, match=None, count=None)
Incrementally iterate sorted set items using async for.
Usage example:
42 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
class aioredis.commands.ServerCommandsMixin
Server commands mixin.
For commands details see: http://redis.io/commands/#server
bgrewriteaof()
Asynchronously rewrite the append-only file.
bgsave()
Asynchronously save the dataset to disk.
44 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
client_getname(encoding=<object object>)
Get the current connection name.
client_kill()
Kill the connection of a client.
client_list()
Get the list of client connections.
Returns list of ClientInfo named tuples.
client_pause(timeout)
Stop processing commands from clients for timeout milliseconds.
Raises
• TypeError – if timeout is not int
• ValueError – if timeout is less than 0
client_setname(name)
Set the current connection name.
command()
Get array of Redis commands.
command_count()
Get total number of Redis commands.
command_getkeys(command, *args, encoding=’utf-8’)
Extract keys given a full Redis command.
command_info(command, *commands)
Get array of specific Redis command details.
config_get(parameter=’*’)
Get the value of a configuration parameter(s).
If called without argument will return all parameters.
Raises TypeError – if parameter is not string
config_resetstat()
Reset the stats returned by INFO.
config_rewrite()
Rewrite the configuration file with the in memory configuration.
config_set(parameter, value)
Set a configuration parameter to the given value.
dbsize()
Return the number of keys in the selected database.
debug_object(key)
Get debugging information about a key.
debug_segfault(key)
Make the server crash.
debug_sleep(timeout)
Suspend connection for timeout seconds.
flushall(async_op=False)
Remove all keys from all databases.
Parameters async_op – lets the entire dataset to be freed asynchronously. Defaults to False
flushdb(async_op=False)
Remove all keys from the current database.
Parameters async_op – lets a single database to be freed asynchronously. Defaults to False
info(section=’default’)
Get information and statistics about the server.
If called without argument will return default set of sections. For available sections, see http://redis.io/
commands/INFO
Raises ValueError – if section is invalid
lastsave()
Get the UNIX time stamp of the last successful save to disk.
monitor()
Listen for all requests received by the server in real time.
role()
Return the role of the server instance.
Returns named tuples describing role of the instance. For fields information see http://redis.io/commands/
role#output-format
save()
Synchronously save the dataset to disk.
shutdown(save=None)
Synchronously save the dataset to disk and then shut down the server.
slaveof(host, port=None)
Make the server a slave of another instance, or promote it as master.
Calling slaveof(None) will send SLAVEOF NO ONE.
Changed in version v0.2.6: slaveof() form deprecated in favour of explicit slaveof(None).
slowlog_get(length=None)
Returns the Redis slow queries log.
slowlog_len()
Returns length of Redis slow queries log.
slowlog_reset()
Resets Redis slow queries log.
sync()
Redis-server internal command used for replication.
time()
Return current server time.
46 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
class aioredis.commands.HyperLogLogCommandsMixin
HyperLogLog commands mixin.
For commands details see: http://redis.io/commands#hyperloglog
pfadd(key, value, *values)
Adds the specified elements to the specified HyperLogLog.
pfcount(key, *keys)
Return the approximated cardinality of the set(s) observed by the HyperLogLog at key(s).
pfmerge(destkey, sourcekey, *sourcekeys)
Merge N different HyperLogLogs into a single one.
class aioredis.commands.TransactionsCommandsMixin
Transaction commands mixin.
For commands details see: http://redis.io/commands/#transactions
Transactions HOWTO:
>>> tr = redis.multi_exec()
>>> result_future1 = tr.incr('foo')
>>> result_future2 = tr.incr('bar')
>>> try:
... result = await tr.execute()
... except MultiExecError:
... pass # check what happened
>>> result1 = await result_future1
>>> result2 = await result_future2
>>> assert result == [result1, result2]
multi_exec()
Returns MULTI/EXEC pipeline wrapper.
Usage:
>>> tr = redis.multi_exec()
>>> fut1 = tr.incr('foo') # NO `await` as it will block forever!
>>> fut2 = tr.incr('bar')
>>> result = await tr.execute()
>>> result
[1, 1]
>>> await asyncio.gather(fut1, fut2)
[1, 1]
pipeline()
Returns Pipeline object to execute bulk of commands.
It is provided for convenience. Commands can be pipelined without it.
Example:
unwatch()
Forget about all watched keys.
watch(key, *keys)
Watch the given keys to determine execution of the MULTI/EXEC block.
class aioredis.commands.Pipeline(connection, commands_factory=lambda conn: conn, *,
loop=None)
Commands pipeline.
Buffers commands for execution in bulk.
This class implements __getattr__ method allowing to call methods on instance created with
commands_factory.
Parameters
• connection (aioredis.RedisConnection) – Redis connection
• commands_factory (callable) – Commands factory to get methods from.
• loop (EventLoop) – An optional event loop instance (uses asyncio.
get_event_loop() if not specified).
coroutine execute(*, return_exceptions=False)
Executes all buffered commands and returns result.
Any exception that is raised by any command is caught and raised later when processing results.
If return_exceptions is set to True then all collected errors are returned in resulting list otherwise
single aioredis.PipelineError exception is raised (containing all collected errors).
Parameters return_exceptions (bool) – Raise or return exceptions.
Raises aioredis.PipelineError – Raised when any command caused error.
class aioredis.commands.MultiExec(connection, commands_factory=lambda conn: conn, *,
loop=None)
Bases: Pipeline.
Multi/Exec pipeline wrapper.
See Pipeline for parameters description.
coroutine execute(*, return_exceptions=False)
Executes all buffered commands and returns result.
see Pipeline.execute() for details.
48 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
class aioredis.commands.ScriptingCommandsMixin
Set commands mixin.
For commands details see: http://redis.io/commands#scripting
eval(script, keys=[], args=[])
Execute a Lua script server side.
evalsha(digest, keys=[], args=[])
Execute a Lua script server side by its SHA1 digest.
script_exists(digest, *digests)
Check existence of scripts in the script cache.
script_flush()
Remove all the scripts from the script cache.
script_kill()
Kill the script currently in execution.
script_load(script)
Load the specified Lua script into the script cache.
class aioredis.commands.ServerCommandsMixin
Server commands mixin.
For commands details see: http://redis.io/commands/#server
bgrewriteaof()
Asynchronously rewrite the append-only file.
bgsave()
Asynchronously save the dataset to disk.
client_getname(encoding=<object object>)
Get the current connection name.
client_kill()
Kill the connection of a client.
client_list()
Get the list of client connections.
Returns list of ClientInfo named tuples.
client_pause(timeout)
Stop processing commands from clients for timeout milliseconds.
Raises
• TypeError – if timeout is not int
• ValueError – if timeout is less than 0
client_setname(name)
Set the current connection name.
command()
Get array of Redis commands.
command_count()
Get total number of Redis commands.
command_getkeys(command, *args, encoding=’utf-8’)
Extract keys given a full Redis command.
command_info(command, *commands)
Get array of specific Redis command details.
config_get(parameter=’*’)
Get the value of a configuration parameter(s).
If called without argument will return all parameters.
Raises TypeError – if parameter is not string
config_resetstat()
Reset the stats returned by INFO.
config_rewrite()
Rewrite the configuration file with the in memory configuration.
config_set(parameter, value)
Set a configuration parameter to the given value.
dbsize()
Return the number of keys in the selected database.
debug_object(key)
Get debugging information about a key.
debug_segfault(key)
Make the server crash.
debug_sleep(timeout)
Suspend connection for timeout seconds.
flushall(async_op=False)
Remove all keys from all databases.
Parameters async_op – lets the entire dataset to be freed asynchronously. Defaults to False
flushdb(async_op=False)
Remove all keys from the current database.
Parameters async_op – lets a single database to be freed asynchronously. Defaults to False
info(section=’default’)
Get information and statistics about the server.
50 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
If called without argument will return default set of sections. For available sections, see http://redis.io/
commands/INFO
Raises ValueError – if section is invalid
lastsave()
Get the UNIX time stamp of the last successful save to disk.
monitor()
Listen for all requests received by the server in real time.
role()
Return the role of the server instance.
Returns named tuples describing role of the instance. For fields information see http://redis.io/commands/
role#output-format
save()
Synchronously save the dataset to disk.
shutdown(save=None)
Synchronously save the dataset to disk and then shut down the server.
slaveof(host, port=None)
Make the server a slave of another instance, or promote it as master.
Calling slaveof(None) will send SLAVEOF NO ONE.
Changed in version v0.2.6: slaveof() form deprecated in favour of explicit slaveof(None).
slowlog_get(length=None)
Returns the Redis slow queries log.
slowlog_len()
Returns length of Redis slow queries log.
slowlog_reset()
Resets Redis slow queries log.
sync()
Redis-server internal command used for replication.
time()
Return current server time.
property in_pubsub
Indicates that connection is in PUB/SUB mode.
Provides the number of subscribed channels.
property patterns
Returns read-only patterns dict.
See pubsub_patterns
psubscribe(pattern, *patterns)
Switch connection to Pub/Sub mode and subscribe to specified patterns.
Arguments can be instances of Channel.
Returns asyncio.gather() coroutine which when done will return a list of subscribed Channel
objects with is_pattern property set to True.
publish(channel, message)
Post a message to channel.
publish_json(channel, obj)
Post a JSON-encoded message to channel.
pubsub_channels(pattern=None)
Lists the currently active channels.
pubsub_numpat()
Returns the number of subscriptions to patterns.
pubsub_numsub(*channels)
Returns the number of subscribers for the specified channels.
punsubscribe(pattern, *patterns)
Unsubscribe from specific patterns.
Arguments can be instances of Channel.
subscribe(channel, *channels)
Switch connection to Pub/Sub mode and subscribe to specified channels.
Arguments can be instances of Channel.
Returns asyncio.gather() coroutine which when done will return a list of Channel objects.
unsubscribe(channel, *channels)
Unsubscribe from specific channels.
Arguments can be instances of Channel.
Warning: Current release (1.3.0) of the library does not support Redis Cluster in a full manner. It provides only
several API methods which may be changed in future.
class aioredis.commands.StreamCommandsMixin
Stream commands mixin
52 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
This module defines several abstract classes that must be used when implementing custom connection managers or
other features.
class aioredis.abc.AbcConnection
Bases: abc.ABC
Abstract connection interface.
abstract property address
Connection address.
abstract close()
Perform connection(s) close and resources cleanup.
abstract property closed
Flag indicating if connection is closing or already closed.
abstract property db
Current selected DB index.
abstract property encoding
Current set connection codec.
abstract execute(command, *args, **kwargs)
Execute redis command.
abstract execute_pubsub(command, *args, **kwargs)
Execute Redis (p)subscribe/(p)unsubscribe commands.
abstract property in_pubsub
Returns number of subscribed channels.
Can be tested as bool indicating Pub/Sub mode state.
abstract property pubsub_channels
Read-only channels dict.
abstract property pubsub_patterns
Read-only patterns dict.
class aioredis.abc.AbcPool
Bases: aioredis.abc.AbcConnection
Abstract connections pool interface.
Inherited from AbcConnection so both have common interface for executing Redis commands.
abstract property address
Connection address or None.
abstract get_connection()
Gets free connection from pool in a sync way.
54 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
Module provides a Pub/Sub listener interface implementing multi-producers, single-consumer queue pattern.
class aioredis.pubsub.Receiver(loop=None, on_close=None)
Multi-producers, single-consumer Pub/Sub queue.
Can be used in cases where a single consumer task must read messages from several different channels (where
pattern subscriptions may not work well or channels can be added/removed dynamically).
Example use case:
Warning: Currently subscriptions implementation has few issues that will be solved eventually, but until
then developer must be aware of the following:
• Single Receiver instance can not be shared between two (or more) connections (or client instances)
because any of them can close _Sender.
• Several Receiver instances can not subscribe to the same channel or pattern. This is a flaw in
subscription mode implementation: subsequent subscriptions to some channel always return first-
created Channel object.
channel(name)
Create a channel.
Returns _Sender object implementing AbcChannel.
property channels
Read-only channels dict.
check_stop(channel, exc=None)
TBD
property is_active
Returns True if listener has any active subscription.
iter(*, encoding=None, decoder=None)
Returns async iterator.
Usage example:
pattern(pattern)
Create a pattern channel.
Returns _Sender object implementing AbcChannel.
property patterns
Read-only patterns dict.
stop()
Stop receiving messages.
All new messages after this call will be ignored, so you must call unsubscribe before stopping this listener.
class aioredis.pubsub._Sender(receiver, name, is_pattern)
Write-Only Channel.
Does not allow direct .get() calls.
Bases: aioredis.abc.AbcChannel
Not to be used directly, returned by Receiver.channel() or Receiver.pattern() calls.
56 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
import aioredis
redis = sentinel.master_for('mymaster')
assert await redis.set('key', 'value')
assert await redis.get('key', encoding='utf-8') == 'value'
7.6.1 RedisSentinel
master_for(name)
Get Redis client to named master. The client is instantiated with special connections pool which is
controlled by SentinelPool. This method is not a coroutine.
Parameters name (str) – Service name.
Return type aioredis.Redis
slave_for(name)
Get Redis client to named slave. The client is instantiated with special connections pool which is con-
trolled by SentinelPool. This method is not a coroutine.
Parameters name (str) – Service name.
Return type aioredis.Redis
execute(command, *args, **kwargs)
Execute Sentinel command. Every command is prefixed with SENTINEL automatically.
Return type asyncio.Future
coroutine ping()
Send PING to Sentinel instance. Currently the ping command will be sent to first sentinel in pool, this may
change in future.
master(name)
Returns a dictionary containing the specified master’s state. Please refer to Redis documentation for more
info on returned data.
Return type asyncio.Future
master_address(name)
Returns a (host, port) pair for the given service name.
Return type asyncio.Future
masters()
Returns a list of dictionaries containing all masters’ states.
Return type asyncio.Future
slaves(name)
Returns a list of slaves for the given service name.
Return type asyncio.Future
sentinels(name)
Returns a list of Sentinels for the given service name.
Return type asyncio.Future
monitor(name, ip, port, quorum)
Add a new master to be monitored by this Sentinel.
Parameters
• name (str) – Service name.
• ip (str) – New node’s IP address.
• port (int) – Node’s TCP port.
• quorum (int) – Sentinel quorum.
remove(name)
Remove a master from Sentinel’s monitoring.
58 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
7.6.2 SentinelPool
Warning: This API has not yet stabilized and may change in future releases.
60 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
if __name__ == '__main__':
asyncio.run(main())
asyncio.run(redis_pool())
import asyncio
import aioredis
redis.close()
await redis.wait_closed()
if __name__ == '__main__':
asyncio.run(main())
import asyncio
import aioredis
tsk = asyncio.ensure_future(reader(ch1))
await sub.unsubscribe('chan:1')
await tsk
sub.close()
pub.close()
if __name__ == '__main__':
asyncio.run(main())
redis.close()
await redis.wait_closed()
if __name__ == '__main__':
(continues on next page)
62 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
import asyncio
import aioredis
master_redis = sentinel_client.master_for('mymaster')
info = await master_redis.role()
print("Master role:", info)
assert info.role == 'master'
sentinel_client.close()
await sentinel_client.wait_closed()
if __name__ == '__main__':
asyncio.run(main())
import asyncio
import aioredis
if __name__ == '__main__':
asyncio.run(main())
import asyncio
import aioredis
if __name__ == '__main__':
asyncio.run(main())
7.8 Contributing
Next, you should install all python dependencies, it is as easy as running single command:
$ make devel
64 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
This will create new file in CHANGES directory. Filename should consist of the ticket ID or other unique identifier.
Five default types are:
• .feature - signifying new feature
• .bugfix - signifying a bug fix
• .doc - documentation improvement
• .removal - deprecation or removal of public API
• .misc - a ticket has been closed, but not in interest of users
You can check if everything is correct by typing:
$ towncrier --draft
$ towncrier
$ make flake
SSL tests
7.8. Contributing 65
aioredis Documentation, Release 1.3.0
To run tests against different redises use --redis-server command line option:
$ pytest --redis-server=/path/to/custom/redis-server
UVLoop
Note: Until Python 3.5.2 EventLoop has no create_future method so aioredis won’t benefit from uvloop’s
futures.
Fixtures
def test_with_loop(loop):
@asyncio.coroutine
def do_something():
pass
loop.run_until_complete(do_something())
unused_port()
Finds and returns free TCP port.
def test_bind(unused_port):
port = unused_port()
assert 1024 < port <= 65535
66 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
Helpers
_testutils.logs(logger, level=None)
Example:
import pytest
@pytest.mark.run_loop
async def test_logs(create_connection, server):
(continues on next page)
7.8. Contributing 67
aioredis Documentation, Release 1.3.0
• aioredis.create_pool
• aioredis.create_reconnecting_redis
• aioredis.Redis
• Blocking operations and connection sharing
• Sorted set commands return values
• Hash hscan command now returns list of tuples
7.9.1 aioredis.create_pool
v0.3
pool = await aioredis.create_pool((
˓→'localhost', 6379))
v1.0
pool = await aioredis.create_pool((
˓→'localhost', 6379))
68 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
7.9.2 aioredis.create_reconnecting_redis
v0.3
redis = await aioredis.create_
˓→reconnecting_redis(
('localhost', 6379))
v1.0
redis = await aioredis.create_redis_pool(
('localhost', 6379))
create_redis_pool returns Redis initialized with ConnectionsPool which is responsible for reconnecting
to server.
Also create_reconnecting_redis was patching the RedisConnection and breaking closed property
(it was always True).
7.9.3 aioredis.Redis
v0.3
redis = await aioredis.create_redis((
˓→'localhost', 6379))
v1.0
redis = await aioredis.create_redis((
˓→'localhost', 6379))
Current implementation of ConnectionsPool by default execute every command on random connection. The
Pros of this is that it allowed implementing AbcConnection interface and hide pool inside Redis class, and
also keep pipelining feature (like RedisConnection.execute). The Cons of this is that different tasks may use same
connection and block it with some long-running command.
We can call it Shared Mode — commands are sent to random connections in pool without need to lock [connection]:
asyncio.ensure_future(task())
asyncio.ensure_future(task())
# Both tasks will send commands through same connection
# without acquiring (locking) it first.
Blocking operations (like blpop, brpop or long-running LUA scripts) in shared mode mode will block connection
and thus may lead to whole program malfunction.
This blocking issue can be easily solved by using exclusive connection for such operations:
70 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
We can call this Exclusive Mode — context manager is used to acquire (lock) exclusive connection from pool and
send all commands through it.
# in aioredis v0.3
pool = await aioredis.create_pool(('localhost', 6379))
with await pool as redis:
# Redis is bound to exclusive connection
redis.set('key', 'val')
Sorted set commands (like zrange, zrevrange and others) that accept withscores argument now return list
of tuples instead of plain list.
v0.3
redis = await aioredis.create_redis((
˓→'localhost', 6379))
v1.0
redis = await aioredis.create_redis((
˓→'localhost', 6379))
hscan updated to return a list of tuples instead of plain mixed key/value list.
v0.3
redis = await aioredis.create_redis((
˓→'localhost', 6379))
v1.0
redis = await aioredis.create_redis((
˓→'localhost', 6379))
7.10 Releases
Features
• Added xdel and xtrim method which missed in commands/streams.py & also added unit test code for
them (see #438);
• Add count argument to spop command (see #485);
• Add support for zpopmax and zpopmin redis commands (see #550);
• Add towncrier: change notes are now stored in CHANGES.txt (see #576);
• Type hints for the library (see #584);
• A few additions to the sorted set commands:
– the blocking pop commands: BZPOPMAX and BZPOPMIN
– the CH and INCR options of the ZADD command
(see #618);
• Added no_ack parameter to xread_group streams method in commands/streams.py (see #625);
72 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
Bugfixes
Improved Documentation
Misc
NEW:
• Implemented new Stream command support (see #299);
• Reduce encode_command() cost about 60% (see #397);
FIX:
• Fix pipeline commands buffering was causing multiple sendto syscalls (see #464 and #473);
• Python 3.7 compatibility fixes (see #426);
• Fix typos in documentation (see #400);
• Fix INFO command result parsing (see #405);
• Fix bug in ConnectionsPool._drop_closed method (see #461);
MISC:
• Update dependencies versions;
• Multiple tests improvements;
NEW:
• Implement new commands: wait, touch, swapdb, unlink (see #376);
• Add async_op argument to flushall and flushdb commands (see #364, and #370);
FIX:
• Important! Fix Sentinel sentinel client with pool minsize greater than 1 (see #380);
• Fix SentinelPool.discover_timeout usage (see #379);
• Fix Receiver hang on disconnect (see #354, and #366);
• Fix an issue with subscribe/psubscribe with empty pool (see #351, and #355);
• Fix an issue when StreamReader’s feed_data is called before set_parser (see #347);
7.10. Releases 73
aioredis Documentation, Release 1.3.0
MISC:
• Update dependencies versions;
• Multiple test fixes;
NEW:
• Important! Drop Python 3.3, 3.4 support; (see #321, #323 and #326);
• Important! Connections pool has been refactored; now create_redis function will yield Redis instance
instead of RedisPool (see #129);
• Important! Change sorted set commands reply format: return list of tuples instead of plain list for commands
accepting withscores argument (see #334);
• Important! Change hscan command reply format: return list of tuples instead of mixed key-value list (see
#335);
• Implement Redis URI support as supported address argument value (see #322);
• Dropped create_reconnecting_redis, create_redis_pool should be used instead;
• Implement custom StreamReader (see #273);
• Implement Sentinel support (see #181);
• Implement pure-python parser (see #212);
• Add migrate_keys command (see #187);
• Add zrevrangebylex command (see #201);
• Add command, command_count, command_getkeys and command_info commands (see #229);
• Add ping support in pubsub connection (see #264);
• Add exist parameter to zadd command (see #288);
• Add MaxClientsError and implement ReplyError specialization (see #325);
• Add encoding parameter to sorted set commands (see #289);
FIX:
• Fix CancelledError in conn._reader_task (see #301);
• Fix pending commands cancellation with CancelledError, use explicit exception instead of calling
cancel() method (see #316);
• Correct error message on Sentinel discovery of master/slave with password (see #327);
• Fix bytearray support as command argument (see #329);
• Fix critical bug in patched asyncio.Lock (see #256);
• Fix Multi/Exec transaction canceled error (see #225);
• Add missing arguments to create_redis and create_redis_pool;
• Fix deprecation warning (see #191);
• Make correct __aiter__() (see #192);
• Backward compatibility fix for with (yield from pool) as conn: (see #205);
74 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
FIX:
• Fix for indistinguishable futures cancellation with asyncio.CancelledError (see #316), cherry-picked
from master;
FIX:
• Fix time command result decoding when using connection-wide encoding setting (see #266);
FIX:
• Critical bug fixed in patched asyncio.Lock (see #256);
NEW:
• Added zrevrangebylex command (see #201), cherry-picked from master;
• Add connection timeout (see #221), cherry-picked from master;
FIX:
• Fixed pool close warning (see #239 and #236), cherry-picked from master;
• Fixed asyncio Lock deadlock issue (see #231 and #241);
FIX:
• Fix pubsub Receiver missing iter() method (see #203);
7.10. Releases 75
aioredis Documentation, Release 1.3.0
NEW:
• Pub/Sub connection commands accept Channel instances (see #168);
• Implement new Pub/Sub MPSC (multi-producers, single-consumer) Queue – aioredis.pubsub.
Receiver (see #176);
• Add aioredis.abc module providing abstract base classes defining interface for basic lib components; (see
#176);
• Implement Geo commands support (see #177 and #179);
FIX:
• Minor tests fixes;
MISC:
• Update examples and docs to use async/await syntax also keeping yield from examples for history (see
#173);
• Reflow Travis CI configuration; add Python 3.6 section (see #170);
• Add AppVeyor integration to run tests on Windows (see #180);
• Update multiple development requirements;
NEW:
• Allow multiple keys in EXISTS command (see #156 and #157);
FIX:
• Close RedisPool when connection to Redis failed (see #136);
• Add simple INFO command argument validation (see #140);
• Remove invalid uses of next()
MISC:
• Update devel.rst docs; update Pub/Sub Channel docs (cross-refs);
• Update MANIFEST.in to include docs, examples and tests in source bundle;
NEW:
• Add hmset_dict command (see #130);
• Add RedisConnection.address property;
• RedisPool minsize/maxsize must not be None;
• Implement close()/wait_closed()/closed interface for pool (see #128);
FIX:
• Add test for hstrlen;
76 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
• Test fixes
MISC:
• Enable Redis 3.2.0 on Travis;
• Add spell checking when building docs (see #132);
• Documentation updated;
7.10. Releases 77
aioredis Documentation, Release 1.3.0
• Decoding data with encoding parameter now takes into account list (array) replies (see #68);
• encoding parameter added to following commands:
– generic commands: keys, randomkey;
– hash commands: hgetall, hkeys, hmget, hvals;
– list commands: blpop, brpop, brpoplpush, lindex, lpop, lrange, rpop, rpoplpush;
– set commands: smembers, spop, srandmember;
– string commands: getrange, getset, mget;
• Backward incompatibility:
ltrim command now returns bool value instead of ‘OK’;
• Tests updated;
78 Chapter 7. Contents
aioredis Documentation, Release 1.3.0
• AutoConnector added;
• wait_closed method added for clean connections shutdown;
• zscore command fixed;
• Test fixes;
7.10. Releases 79
aioredis Documentation, Release 1.3.0
– scripting commands;
– string commands;
– list commands;
• Initial release;
• RedisConnection implemented;
• RedisPool implemented;
• Docs for RedisConnection & RedisPool;
• WIP on high-level API.
7.11 Glossary
80 Chapter 7. Contents
CHAPTER
EIGHT
• genindex
• modindex
• search
81
aioredis Documentation, Release 1.3.0
a
aioredis, 20
aioredis.abc, 54
aioredis.commands, 15
aioredis.pubsub, 55
aioredis.sentinel, 56
83
aioredis Documentation, Release 1.3.0
Symbols 36
_Sender (class in aioredis.pubsub), 56 bitop_or() (aioredis.commands.StringCommandsMixin
_testutils.assert_almost_equal() (built-in method), 36
function), 68 bitop_xor() (aiore-
_testutils.logs() (built-in function), 67 dis.commands.StringCommandsMixin method),
_testutils.redis_version() (built-in func- 36
tion), 67 bitpos() (aioredis.commands.StringCommandsMixin
method), 36
A blpop() (aioredis.commands.ListCommandsMixin
method), 39
AbcChannel (class in aioredis.abc), 55
brpop() (aioredis.commands.ListCommandsMixin
AbcConnection (class in aioredis.abc), 54
method), 39
AbcPool (class in aioredis.abc), 54
brpoplpush() (aiore-
acquire() (aioredis.ConnectionsPool method), 25
dis.commands.ListCommandsMixin method),
address (aioredis.RedisConnection attribute), 21
39
address() (aioredis.abc.AbcConnection property), 54
bzpopmax() (aioredis.commands.SortedSetCommandsMixin
address() (aioredis.abc.AbcPool property), 54
method), 41
address() (aioredis.Redis property), 31
bzpopmin() (aioredis.commands.SortedSetCommandsMixin
aioredis (module), 20
method), 42
aioredis.abc (module), 54
aioredis.commands (module), 15, 31
aioredis.pubsub (module), 55
C
aioredis.sentinel (module), 56 Channel (class in aioredis), 28
append() (aioredis.commands.StringCommandsMixin channel() (aioredis.pubsub.Receiver method), 56
method), 36 ChannelClosedError, 26
asyncio, 80 channels() (aioredis.commands.PubSubCommandsMixin
auth() (aioredis.Redis method), 31 property), 51
auth() (aioredis.RedisConnection method), 23 channels() (aioredis.pubsub.Receiver property), 56
AuthError, 26 check_quorum() (aioredis.sentinel.RedisSentinel
method), 59
B check_stop() (aioredis.pubsub.Receiver method), 56
bgrewriteaof() (aiore- clear() (aioredis.ConnectionsPool method), 25
dis.commands.ServerCommandsMixin client_getname() (aiore-
method), 44, 49 dis.commands.ServerCommandsMixin
bgsave() (aioredis.commands.ServerCommandsMixin method), 44, 49
method), 44, 49 client_kill() (aiore-
bitcount() (aioredis.commands.StringCommandsMixin dis.commands.ServerCommandsMixin
method), 36 method), 45, 49
bitop_and() (aiore- client_list() (aiore-
dis.commands.StringCommandsMixin method), dis.commands.ServerCommandsMixin
36 method), 45, 49
bitop_not() (aiore- client_pause() (aiore-
dis.commands.StringCommandsMixin method), dis.commands.ServerCommandsMixin
85
aioredis Documentation, Release 1.3.0
86 Index
aioredis Documentation, Release 1.3.0
Index 87
aioredis Documentation, Release 1.3.0
88 Index
aioredis Documentation, Release 1.3.0
Index 89
aioredis Documentation, Release 1.3.0
S sinterstore() (aiore-
sadd() (aioredis.commands.SetCommandsMixin dis.commands.SetCommandsMixin method),
method), 41 41
save() (aioredis.commands.ServerCommandsMixin sismember() (aiore-
method), 46, 51 dis.commands.SetCommandsMixin method),
scan() (aioredis.commands.GenericCommandsMixin 41
method), 33 size (aioredis.ConnectionsPool attribute), 24
scard() (aioredis.commands.SetCommandsMixin slave_for() (aioredis.sentinel.RedisSentinel
method), 41 method), 58
script_exists() (aiore- slave_for() (aioredis.sentinel.SentinelPool method),
dis.commands.ScriptingCommandsMixin 59
method), 49 SlaveNotFoundError, 27
script_flush() (aiore- slaveof() (aioredis.commands.ServerCommandsMixin
dis.commands.ScriptingCommandsMixin method), 46, 51
method), 49 SlaveReplyError, 27
script_kill() (aiore- slaves() (aioredis.sentinel.RedisSentinel method), 58
dis.commands.ScriptingCommandsMixin slowlog_get() (aiore-
method), 49 dis.commands.ServerCommandsMixin
script_load() (aiore- method), 46, 51
dis.commands.ScriptingCommandsMixin slowlog_len() (aiore-
method), 49 dis.commands.ServerCommandsMixin
ScriptingCommandsMixin (class in aiore- method), 46, 51
dis.commands), 49 slowlog_reset() (aiore-
sdiff() (aioredis.commands.SetCommandsMixin dis.commands.ServerCommandsMixin
method), 41 method), 46, 51
sdiffstore() (aiore- smembers() (aioredis.commands.SetCommandsMixin
dis.commands.SetCommandsMixin method), method), 41
41 smove() (aioredis.commands.SetCommandsMixin
select() (aioredis.ConnectionsPool method), 25 method), 41
select() (aioredis.Redis method), 31 sort() (aioredis.commands.GenericCommandsMixin
select() (aioredis.RedisConnection method), 23 method), 33
SentinelPool (class in aioredis.sentinel), 59 SortedSetCommandsMixin (class in aiore-
sentinels() (aioredis.sentinel.RedisSentinel dis.commands), 41
method), 58 spop() (aioredis.commands.SetCommandsMixin
server, 67 method), 41
serverB, 67 srandmember() (aiore-
ServerCommandsMixin (class in aiore- dis.commands.SetCommandsMixin method),
dis.commands), 44, 49 41
set() (aioredis.commands.StringCommandsMixin srem() (aioredis.commands.SetCommandsMixin
method), 37 method), 41
set() (aioredis.sentinel.RedisSentinel method), 59 sscan() (aioredis.commands.SetCommandsMixin
setbit() (aioredis.commands.StringCommandsMixin method), 41
method), 37 ssl_proxy() (built-in function), 67
SetCommandsMixin (class in aioredis.commands), 40 start_server() (built-in function), 67
setex() (aioredis.commands.StringCommandsMixin stop() (aioredis.pubsub.Receiver method), 56
method), 37 StreamCommandsMixin (class in aiore-
setnx() (aioredis.commands.StringCommandsMixin dis.commands), 52
method), 37 StringCommandsMixin (class in aiore-
setrange() (aioredis.commands.StringCommandsMixin dis.commands), 36
method), 37 strlen() (aioredis.commands.StringCommandsMixin
shutdown() (aioredis.commands.ServerCommandsMixin method), 38
method), 46, 51 subscribe() (aiore-
sinter() (aioredis.commands.SetCommandsMixin dis.commands.PubSubCommandsMixin
method), 41 method), 52
90 Index
aioredis Documentation, Release 1.3.0
Index 91
aioredis Documentation, Release 1.3.0
zinterstore() (aiore-
dis.commands.SortedSetCommandsMixin
method), 42
zlexcount() (aiore-
dis.commands.SortedSetCommandsMixin
method), 42
zpopmax() (aioredis.commands.SortedSetCommandsMixin
method), 42
zpopmin() (aioredis.commands.SortedSetCommandsMixin
method), 43
zrange() (aioredis.commands.SortedSetCommandsMixin
method), 43
zrangebylex() (aiore-
dis.commands.SortedSetCommandsMixin
method), 43
zrangebyscore() (aiore-
dis.commands.SortedSetCommandsMixin
method), 43
zrank() (aioredis.commands.SortedSetCommandsMixin
method), 43
zrem() (aioredis.commands.SortedSetCommandsMixin
method), 43
zremrangebylex() (aiore-
dis.commands.SortedSetCommandsMixin
method), 43
zremrangebyrank() (aiore-
dis.commands.SortedSetCommandsMixin
method), 43
zremrangebyscore() (aiore-
dis.commands.SortedSetCommandsMixin
method), 43
zrevrange() (aiore-
dis.commands.SortedSetCommandsMixin
method), 44
zrevrangebylex() (aiore-
dis.commands.SortedSetCommandsMixin
method), 44
zrevrangebyscore() (aiore-
dis.commands.SortedSetCommandsMixin
method), 44
zrevrank() (aioredis.commands.SortedSetCommandsMixin
method), 44
zscan() (aioredis.commands.SortedSetCommandsMixin
method), 44
zscore() (aioredis.commands.SortedSetCommandsMixin
method), 44
zunionstore() (aiore-
dis.commands.SortedSetCommandsMixin
method), 44
92 Index