diff --git a/examples/cache_example.py b/examples/cache_example.py new file mode 100644 index 00000000..44cc7140 --- /dev/null +++ b/examples/cache_example.py @@ -0,0 +1,38 @@ +""" +Example of caching using aiocache package. To run it you will need a Redis +instance running in localhost:6379. + +Running this example you will see that the first call lasts 3 seconds and +the rest are instant because the value is retrieved from the Redis. + +If you want more info about the package check +https://github.com/argaen/aiocache +""" + +import asyncio +import aiocache + +from sanic import Sanic +from sanic.response import json +from sanic.log import log +from aiocache import RedisCache, cached +from aiocache.serializers import JsonSerializer + +app = Sanic(__name__) +aiocache.set_defaults(cache=RedisCache) + + +@cached(key="my_custom_key", serializer=JsonSerializer()) +async def expensive_call(): + log.info("Expensive has been called") + await asyncio.sleep(3) + return {"test": True} + + +@app.route("/") +async def test(request): + log.info("Received GET /") + return json(await expensive_call()) + + +app.run(host="0.0.0.0", port=8000, loop=asyncio.get_event_loop()) diff --git a/requirements-dev.txt b/requirements-dev.txt index 9593b0cf..00feb17d 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,6 +2,7 @@ httptools ujson uvloop aiohttp +aiocache pytest coverage tox @@ -9,4 +10,4 @@ gunicorn bottle kyoukai falcon -tornado \ No newline at end of file +tornado