The asyncio cache that implements multiple backends.
This library aims for simplicity over specialization. It provides a common interface for all caches which allows to store any python object. The operations supported by all backends are:
add
exists
get
set
multi_get
multi_set
delete
raw
: Sends raw command to the underlying client
Aiocache provides 3 main entities:
- backends: Allow you specify which backend you want to use for your cache. Currently supporting: SimpleMemoryCache, RedisCache using aioredis and MemCache using aiomcache.
- serializers: Serialize and deserialize the data between your code and the backends. This allows you to save any Python object into your cache. Currently supporting: DefaultSerializer, PickleSerializer, JsonSerializer.
- policies: Allows the cache to use a policy. Currently supporting: DefaultPolicy, LRUPolicy.
Those 3 entities combine during some of the cache operations to apply the desired command (backend), data transformation (serializer) and pre/post hooks (policies). To have a better vision of what happens, here you can check how set
function works in aiocache
:
Install the package with pip install aiocache
.
import asyncio
from collections import namedtuple
from aiocache import cached, RedisCache
from aiocache.serializers import PickleSerializer
Result = namedtuple('Result', "content, status")
@cached(ttl=10, cache=RedisCache, serializer=PickleSerializer())
async def async_main():
print("First ASYNC non cached call...")
await asyncio.sleep(1)
return Result("content", 200)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
print(loop.run_until_complete(async_main()))
print(loop.run_until_complete(async_main()))
print(loop.run_until_complete(async_main()))
print(loop.run_until_complete(async_main()))
The decorator by default will use the SimpleMemoryCache
backend and the DefaultSerializer
. If you want to use a different backend, you can call it with cached(ttl=10, backend=RedisCache)
. Also, if you want to use a specific serializer just use cached(ttl=10, serializer=DefaultSerializer())