aioredis
aioredis
Release 0.2.8
Alexey Popravka
1 Features 3
2 Installation 5
3 Requirements 7
4 Contribute 9
5 License 11
6 Contents 13
6.1 Getting started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.1.1 Commands Pipelining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.1.2 Multi/Exec transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.1.3 Pub/Sub mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.1.4 Python 3.5 async/await support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.1.5 SSL/TLS support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.2 aioredis — API Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.2.1 Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.2.2 Connections Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6.2.3 Pub/Sub Channel object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.2.4 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.2.5 Commands Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.3 aioredis.Redis — Commands Mixins Reference . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.1 Generic commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.3.2 Strings commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.3.3 Hash commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3.4 List commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3.5 Set commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.3.6 Sorted Set commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.3.7 Server commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.3.8 HyperLogLog commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.3.9 Transaction commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.3.10 Scripting commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.3.11 Server commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.3.12 Pub/Sub commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.3.13 Cluster commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4 Examples of aioredis usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4.1 Low-level connection usage example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
i
6.4.2 Connections pool example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.4.3 Commands example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.4.4 Transaction example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.4.5 Pub/Sub example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.4.6 Scan command example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.5 Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.5.1 Code style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.5.2 Running tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.5.3 Writing tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.6 Releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.6.1 Recent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.6.2 Historical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.7 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
ii
aioredis Documentation, Release 0.2.8
Contents 1
aioredis Documentation, Release 0.2.8
2 Contents
CHAPTER 1
Features
3
aioredis Documentation, Release 0.2.8
4 Chapter 1. Features
CHAPTER 2
Installation
5
aioredis Documentation, Release 0.2.8
6 Chapter 2. Installation
CHAPTER 3
Requirements
7
aioredis Documentation, Release 0.2.8
8 Chapter 3. Requirements
CHAPTER 4
Contribute
9
aioredis Documentation, Release 0.2.8
10 Chapter 4. Contribute
CHAPTER 5
License
11
aioredis Documentation, Release 0.2.8
12 Chapter 5. License
CHAPTER 6
Contents
Note: As as convenience aioredis provides pipeline() method allowing to execute bulk of commands at once
(get source code):
# Convenient way
@asyncio.coroutine
def convenience_way():
pipe = redis.pipeline()
fut1 = pipe.get('foo')
fut2 = pipe.incr('bar')
result = yield from pipe.execute()
val, cnt = yield from asyncio.gather(fut1, fut2)
13
aioredis Documentation, Release 0.2.8
As you can notice yield from is only used at line 6 with tr.execute and not with tr.set(...) calls.
Warning: It is very important not to yield from buffered command (ie tr.set(’foo’, ’123’)) as it
will block forever.
The following code will block forever:
tr = redis.multi_exec()
yield from tr.incr('foo') # that's all. we've stuck!
Note: In Pub/Sub mode redis connection can only receive messages or issue (P)SUBSCRIBE / (P)UNSUBSCRIBE
commands.
14 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
@asyncio.coroutine
def async_reader(channel):
while (yield from channel.wait_message()):
msg = yield from channel.get(encoding='utf-8')
# ... process message ...
print("message in {}: {}".format(channel.name, msg))
tsk1 = asyncio.async(async_reader(ch1))
# Or alternatively:
@asyncio.coroutine
def async_reader2(channel):
while True:
msg = yield from channel.get(encoding='utf-8')
if msg is None:
break
# ... process message ...
print("message in {}: {}".format(channel.name, msg))
tsk2 = asyncio.async(async_reader2(ch2))
Warning: Using Pub/Sub mode with Pool is possible but only within with block or by explicitly
acquiring/releasing connection. See example below.
if msg == STOPWORD:
return
New scan-family commands added with support of async for (get source code):
redis = await aioredis.create_redis(
('localhost', 6379))
Though Redis server does not support data encryption it is still possible to setup Redis server behind SSL proxy.
For such cases aioredis library support secure connections through asyncio SSL support. See BaseEvent-
Loop.create_connection for details.
6.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
16 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
@asyncio.coroutine
def connection_example():
conn = yield from aioredis.create_connection(
('localhost', 6379))
# connecting to socket
# conn = yiled from aioredis.create_connection(
# '/path/to/redis/socket')
val = yield from conn.execute('GET', 'my-key')
asyncio.get_event_loop().run_until_complete(connection_example())
close()
Closes connection.
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 then 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’.
18 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
@asyncio.coroutine
def test_pool():
pool = yield from aioredis.create_pool(('localhost', 6379))
with (yield from pool) as redis:
val = yield from redis.get('my-key')
size
Current pool size — number of free and used connections (read-only).
freesize
Current number of free connections (read-only).
db
Currently selected db index (read-only).
encoding
Current codec for response decoding (read-only).
closed
True if pool is closed.
New in version v0.2.8.
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()
Acquires a connection from free pool. Creates new connection if needed.
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.
Channel object is a wrapper around queue for storing received pub/sub messages.
class aioredis.Channel(name, is_pattern, loop=None)
Object representing Pub/Sub messages queue. It’s basically a wrapper around asyncio.Queue.
name
Holds encoded channel/pattern name.
20 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
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-*”)
Shortcut to get(encoding="utf-8", decoder=json.loads)
coroutine wait_message()
Waits for message to become available in channel.
This function is coroutine.
Main idea is to use it in loops:
>>> ch = redis.channels['channel:1']
>>> while (yield from ch.wait_message()):
... msg = yield from ch.get()
6.2.4 Exceptions
exception aioredis.RedisError
Base exception class for aioredis exceptions.
exception aioredis.ProtocolError
Raised when protocol error occurs. When this type of exception is raised connection must be considered broken
and must be closed.
exception aioredis.ReplyError
Raised for Redis error replies.
exception aioredis.ConnectionClosedError
Raised if connection to server was lost/closed.
exception aioredis.PipelineError
Raised from pipeline() if any pipelined command raised error.
exception aioredis.MultiExecError
Same as PipelineError but raised when executing multi_exec block.
exception aioredis.WatchVariableError
Raised if watched variable changed (EXEC returns None). Subclass of MultiExecError.
exception aioredis.ChannelClosedError
Raised from aioredis.Channel.get() when Pub/Sub channel is unsubscribed and messages queue is
empty.
exception aioredis.PoolClosedError
Raised from aioredis.RedisPool.acquire() when pool is already closed.
Exceptions Hierarchy
Exception
RedisError
ProtocolError
ReplyError
PipelineError
MultiExecError
WatchVariableError
ChannelClosedError
ConnectionClosedError
PoolClosedError
The library provides high-level API implementing simple interface to Redis commands.
coroutine aioredis.create_redis(address, *, db=0, password=None, ssl=None, encoding=None,
commands_factory=Redis, loop=None)
This coroutine creates high-level Redis interface instance.
Parameters
• address (tuple or str) – An address where to connect. Can be a (host, port) tuple
or unix domain socket path string.
• db (int) – Redis database index to switch to when connected.
• password (str or None) – Password to use if redis server instance requires authoriza-
tion.
• ssl (ssl.SSLContext or True or None) – SSL context that is passed through to
asyncio.BaseEventLoop.create_connection().
• encoding (str or None) – Codec to use for response decoding.
• commands_factory (callable) – A factory accepting single parameter –
RedisConnection instance and returning an object providing high-level interface to
Redis. Redis by default.
• loop (EventLoop) – An optional event loop instance (uses
asyncio.get_event_loop() if not specified).
22 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
class aioredis.Redis(connection)
High-level Redis commands interface.
For details see mixins reference.
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)
Check if key exists.
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 key.
if timeout is float it will be multiplied by 1000 coerced to int and passed to pexpire method.
Otherwise raises TypeError if timestamp argument is not int.
keys(pattern, *, encoding=<object object>)
Returns all keys matching pattern.
migrate(host, port, key, dest_db, timeout, copy=False, replace=False)
Atomically transfer a key from a Redis instance to another one.
move(key, db)
Move key from currently selected database to specified destination.
Raises
• TypeError – if db is not int
• ValueError – if db is less then 0
object_encoding(key)
Returns the kind of internal representation used in order to store the value associated with a key (OBJECT
ENCODING).
object_idletime(key)
Returns the number of seconds since the object is not requested by read or write operations (OBJECT
IDLETIME).
24 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
object_refcount(key)
Returns the number of references of the value associated with the specified key (OBJECT REFCOUNT).
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:
>>> match = 'something*'
>>> cur = b'0'
>>> while cur:
... cur, keys = yield from redis.scan(cur, match=match)
... for key in keys:
... print('Matched:', key)
class aioredis.commands.GenericCommandsMixin
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
26 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
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:
>>> yield from redis.hmset_dict(
... 'key', {'field1': 'value1', 'field2': 'value2'})
28 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
Note: dict and kwargs not get mixed into single dictionary, if both specified and both have same
key(s) – kwargs will win:
>>> yield from redis.hmset_dict('key', {'foo': 'bar'}, foo='baz')
>>> yield from redis.hget('key', 'foo', encoding='utf-8')
'baz'
class aioredis.commands.HashCommandsMixin
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 then 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 then 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
• TypeError – if timeout is not int
• ValueError – if timeout is less then 0
lindex(key, index, *, encoding=<object object>)
Get an element from a list by its index.
Raises TypeError – if index is not int
linsert(key, pivot, value, before=False)
Inserts value in the list stored at key either before or after the reference value pivot.
llen(key)
Returns the length of the list stored at key.
lpop(key, *, encoding=<object object>)
Removes and returns the first element of the list stored at key.
lpush(key, value, *values)
Insert all the specified values at the head of the list stored at key.
lpushx(key, value)
Inserts value at the head of the list stored at key, only if key already exists and holds a list.
lrange(key, start, stop, *, encoding=<object object>)
Returns the specified elements of the list stored at key.
Raises TypeError – if start or stop is not int
lrem(key, count, value)
Removes the first count occurrences of elements equal to value from the list stored at key.
Raises TypeError – if count is not int
lset(key, index, value)
Sets the list element at index to value.
Raises TypeError – if index is not int
ltrim(key, start, stop)
Trim an existing list so that it will contain only the specified range of elements specified.
Raises TypeError – if start or stop is not int
rpop(key, *, encoding=<object object>)
Removes and returns the last element of the list stored at key.
rpoplpush(sourcekey, destkey, *, encoding=<object object>)
Atomically returns and removes the last element (tail) of the list stored at source, and pushes the element
at the first element (head) of the list stored at destination.
rpush(key, value, *values)
Insert all the specified values at the tail of the list stored at key.
30 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
rpushx(key, value)
Inserts value at the tail of the list stored at key, only if key already exists and holds a list.
class aioredis.commands.SetCommandsMixin
Set commands mixin.
For commands details see: http://redis.io/commands#set
sadd(key, member, *members)
Add one or more members to a set.
scard(key)
Get the number of members in a set.
sdiff(key, *keys)
Subtract multiple sets.
sdiffstore(destkey, key, *keys)
Subtract multiple sets and store the resulting set in a key.
sinter(key, *keys)
Intersect multiple sets.
sinterstore(destkey, key, *keys)
Intersect multiple sets and store the resulting set in a key.
sismember(key, member)
Determine if a given value is a member of a set.
smembers(key, *, encoding=<object object>)
Get all the members in a set.
smove(sourcekey, destkey, member)
Move a member from one set to another.
spop(key, *, encoding=<object object>)
Remove and return a random member from a set.
srandmember(key, count=None, *, encoding=<object object>)
Get one or multiple random members from a set.
srem(key, member, *members)
Remove one or more members from a set.
sscan(key, cursor=0, match=None, count=None)
Incrementally iterate Set elements.
sunion(key, *keys)
Add multiple sets.
sunionstore(destkey, key, *keys)
Add multiple sets and store the resulting set in a key.
class aioredis.commands.SetCommandsMixin
class aioredis.commands.SortedSetCommandsMixin
Sorted Sets commands mixin.
For commands details see: http://redis.io/commands/#sorted_set
zadd(key, score, member, *pairs)
Add one or more members to a sorted set or update its score.
Raises
• TypeError – score not int or float
• TypeError – length of pairs is not even number
zcard(key)
Get the number of members in a sorted set.
zcount(key, min=-inf, max=inf, *, exclude=None)
Count the members in a sorted set with scores within the given values.
Raises
• TypeError – min or max is not float or int
• ValueError – if min grater then max
zincrby(key, increment, member)
Increment the score of a member in a sorted set.
Raises TypeError – increment is not float or int
zinterstore(destkey, key, *keys, with_weights=False, aggregate=None)
Intersect multiple sorted sets and store result in a new key.
Parameters with_weights (bool) – when set to true each key must be a tuple in form of
(key, weight)
zlexcount(key, min=b’-‘, max=b’+’, include_min=True, include_max=True)
Count the number of members in a sorted set between a given lexicographical range.
Raises
• TypeError – if min is not bytes
• TypeError – if max is not bytes
zrange(key, start=0, stop=-1, withscores=False)
Return a range of members in a sorted set, by index.
Raises
• TypeError – if start is not int
32 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
Raises
• TypeError – if min or max is not float or int
• TypeError – if both offset and count are not specified
• TypeError – if offset is not int
• TypeError – if count is not int
zrevrank(key, member)
Determine the index of a member in a sorted set, with scores ordered from high to low.
zscan(key, cursor=0, match=None, count=None)
Incrementally iterate sorted sets elements and associated scores.
zscore(key, member)
Get the score associated with the given member in a sorted set.
zunionstore(destkey, key, *keys, with_weights=False, aggregate=None)
Add multiple sorted sets and store result in a new key.
class aioredis.commands.SortedSetCommandsMixin
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.
34 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
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 then 0
client_setname(name)
Set the current connection name.
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.
flushall()
Remove all keys from all databases.
flushdb()
Remove all keys from the current database.
info(section)
Get information and statistics about the server.
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=<object object>, 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(length=None)
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.
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 = yield from tr.execute()
... except MultiExecError:
... pass # check what happened
36 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
multi_exec()
Returns MULTI/EXEC pipeline wrapper.
Usage:
>>> tr = redis.multi_exec()
>>> fut1 = tr.incr('foo') # NO `yield from` as it will block forever!
>>> fut2 = tr.incr('bar')
>>> result = yield from tr.execute()
>>> result
[1, 1]
>>> yield from 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:
>>> pipe = redis.pipeline()
>>> fut1 = pipe.incr('foo') # NO `yield from` as it will block forever!
>>> fut2 = pipe.incr('bar')
>>> result = yield from pipe.execute()
>>> result
[1, 1]
>>> yield from asyncio.gather(fut1, fut2)
[1, 1]
>>> #
>>> # The same can be done without pipeline:
>>> #
>>> fut1 = redis.incr('foo') # the 'INCRY foo' command already sent
>>> fut2 = redis.incr('bar')
>>> yield from asyncio.gather(fut1, fut2)
[2, 2]
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.
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.
38 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
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 then 0
client_setname(name)
Set the current connection name.
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.
flushall()
Remove all keys from all databases.
flushdb()
Remove all keys from the current database.
info(section)
Get information and statistics about the server.
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=<object object>, 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(length=None)
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.
40 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
channels
Returns read-only channels dict.
See pubsub_channels
in_pubsub
Indicates that connection is in PUB/SUB mode.
Provides the number of subscribed channels.
patterns
Returns read-only patterns dict.
See pubsub_patterns
psubscribe(pattern, *patterns)
Switch connection to Pub/Sub mode and subscribe to specified patterns.
Returns asyncio.gather() coroutine which when done will return a list of subscribed patterns.
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.
subscribe(channel, *channels)
Switch connection to Pub/Sub mode and subscribe to specified channels.
Returns asyncio.gather() coroutine which when done will return a list of subscribed channels.
unsubscribe(channel, *channels)
Unsubscribe from specific channels.
Warning: Current release (0.2.8) of the library does not support Redis Cluster in a full manner. It provides only
several API methods which may be changed in future.
def main():
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
conn = yield from aioredis.create_connection(
('localhost', 6379), encoding='utf-8')
if __name__ == '__main__':
main()
def main():
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
pool = yield from aioredis.create_pool(
('localhost', 6379),
minsize=5, maxsize=10)
with (yield from pool) as redis: # high-level redis API instance
yield from redis.set('my-key', 'value')
val = yield from redis.get('my-key')
print('raw value:', val)
pool.close()
yield from pool.wait_closed() # closing all open connections
42 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
loop.run_until_complete(go())
if __name__ == '__main__':
main()
def main():
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
redis = yield from aioredis.create_redis(
('localhost', 6379))
yield from redis.set('my-key', 'value')
val = yield from redis.get('my-key')
print(val)
if __name__ == '__main__':
main()
def main():
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
redis = yield from aioredis.create_redis(
('localhost', 6379))
yield from redis.delete('foo', 'bar')
tr = redis.multi_exec()
fut1 = tr.incr('foo')
fut2 = tr.incr('bar')
res = yield from tr.execute()
res2 = yield from asyncio.gather(fut1, fut2)
print(res)
loop.run_until_complete(go())
if __name__ == '__main__':
main()
def main():
loop = asyncio.get_event_loop()
@asyncio.coroutine
def reader(ch):
while (yield from ch.wait_message()):
msg = yield from ch.get_json()
print("Got Message:", msg)
@asyncio.coroutine
def go():
pub = yield from aioredis.create_redis(
('localhost', 6379))
sub = yield from aioredis.create_redis(
('localhost', 6379))
res = yield from sub.subscribe('chan:1')
ch1 = res[0]
tsk = asyncio.async(reader(ch1))
loop.run_until_complete(go())
if __name__ == '__main__':
main()
44 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
import asyncio
import aioredis
def main():
"""Scan command example."""
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
redis = yield from aioredis.create_redis(
('localhost', 6379))
redis.close()
yield from redis.wait_closed()
loop.run_until_complete(go())
if __name__ == '__main__':
import os
if 'redis_version:2.6' not in os.environ.get('REDIS_VERSION', ''):
main()
6.5 Contributing
Next, you should install all python dependencies, it is as easy as running single command:
$ make devel
6.5. Contributing 45
aioredis Documentation, Release 0.2.8
$ make flake
SSL tests
To run tests against different redises use --redis-server command line option:
$ py.test --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.
46 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
tests/py35_generic_commands_tests.py
tests/py35_pool_test.py
Fixtures
unused_port()
Finds and returns free TCP port.
def test_bind(unused_port):
port = unused_port()
assert 1024 < port <= 65535
6.5. Contributing 47
aioredis Documentation, Release 0.2.8
ssl_proxy(unsecure_port)
Start SSL proxy.
Parameters unsecure_port (int) – Redis server instance port
Returns secure_port and ssl_context pair
Return type tuple
6.6 Releases
6.6.1 Recent
0.2.8 (2016-07-22)
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;
• Test fixes
MISC:
• Enable Redis 3.2.0 on Travis;
• Add spell checking when building docs (see #132);
• Documentation updated;
0.2.7 (2016-05-27)
48 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
0.2.6 (2016-03-30)
0.2.5 (2016-03-02)
0.2.4 (2015-10-13)
6.6. Releases 49
aioredis Documentation, Release 0.2.8
0.2.3 (2015-08-14)
0.2.2 (2015-07-07)
• 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;
0.2.1 (2015-07-06)
0.2.0 (2015-06-04)
50 Chapter 6. Contents
aioredis Documentation, Release 0.2.8
6.6.2 Historical
0.1.5 (2014-12-09)
• AutoConnector added;
• wait_closed method added for clean connections shutdown;
• zscore command fixed;
• Test fixes;
0.1.4 (2014-09-22)
0.1.3 (2014-08-08)
0.1.2 (2014-07-31)
6.6. Releases 51
aioredis Documentation, Release 0.2.8
0.1.1 (2014-07-07)
0.1.0 (2014-06-24)
• Initial release;
• RedisConnection implemented;
• RedisPool implemented;
• Docs for RedisConnection & RedisPool;
• WIP on high-level API.
6.7 Glossary
52 Chapter 6. Contents
CHAPTER 7
• genindex
• modindex
• search
53
aioredis Documentation, Release 0.2.8
a
aioredis, 16
aioredis.commands, 13
55
aioredis Documentation, Release 0.2.8
57
aioredis Documentation, Release 0.2.8
58 Index
aioredis Documentation, Release 0.2.8
K O
keys() (aioredis.commands.GenericCommandsMixin object_encoding() (aiore-
method), 24 dis.commands.GenericCommandsMixin
method), 24
L object_idletime() (aiore-
lastsave() (aioredis.commands.ServerCommandsMixin dis.commands.GenericCommandsMixin
method), 35, 40 method), 24
lindex() (aioredis.commands.ListCommandsMixin object_refcount() (aiore-
method), 30 dis.commands.GenericCommandsMixin
linsert() (aioredis.commands.ListCommandsMixin method), 24
method), 30
ListCommandsMixin (class in aioredis.commands), 29 P
llen() (aioredis.commands.ListCommandsMixin patterns (aioredis.commands.PubSubCommandsMixin
method), 30 attribute), 41
loop, 47 persist() (aioredis.commands.GenericCommandsMixin
lpop() (aioredis.commands.ListCommandsMixin method), 25
method), 30 pexpire() (aioredis.commands.GenericCommandsMixin
lpush() (aioredis.commands.ListCommandsMixin method), 25
method), 30 pexpireat() (aioredis.commands.GenericCommandsMixin
lpushx() (aioredis.commands.ListCommandsMixin method), 25
method), 30 pfadd() (aioredis.commands.HyperLogLogCommandsMixin
lrange() (aioredis.commands.ListCommandsMixin method), 36
method), 30 pfcount() (aioredis.commands.HyperLogLogCommandsMixin
lrem() (aioredis.commands.ListCommandsMixin method), 36
method), 30 pfmerge() (aioredis.commands.HyperLogLogCommandsMixin
lset() (aioredis.commands.ListCommandsMixin method), method), 36
30 ping() (aioredis.Redis method), 23
ltrim() (aioredis.commands.ListCommandsMixin Pipeline (class in aioredis.commands), 37
method), 30 pipeline() (aioredis.commands.TransactionsCommandsMixin
method), 37
M PipelineError, 21
maxsize (aioredis.RedisPool attribute), 19 pool, 47
mget() (aioredis.commands.StringCommandsMixin PoolClosedError, 22
method), 27 ProtocolError, 21
migrate() (aioredis.commands.GenericCommandsMixin psetex() (aioredis.commands.StringCommandsMixin
method), 24 method), 27
minsize (aioredis.RedisPool attribute), 19 psubscribe() (aioredis.commands.PubSubCommandsMixin
method), 41
Index 59
aioredis Documentation, Release 0.2.8
60 Index
aioredis Documentation, Release 0.2.8
Index 61
aioredis Documentation, Release 0.2.8
zunionstore() (aioredis.commands.SortedSetCommandsMixin
method), 34
62 Index