old_contents: """
  Example of caching using aiocache package. To run it you will need a Redis
  instance running in localhost:6379. You can also try with SimpleMemoryCache.
  
  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 cached
  from aiocache.serializers import JsonSerializer
  
  app = Sanic(__name__)
  
  
  @app.listener('before_server_start')
  def init_cache(sanic, loop):
      aiocache.settings.set_defaults(
          class_="aiocache.RedisCache",
          # class_="aiocache.SimpleMemoryCache",
          loop=loop
      )
  
  
  @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)
  
new_contents: """
  Example of caching using aiocache package. To run it you will need to install
  aiocache with `pip install aiocache` plus 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 Redis.
  
  If you want more info about the package check
  https://github.com/argaen/aiocache
  """
  
  import asyncio
  import uuid
  
  from sanic import Sanic
  from sanic.response import json
  from sanic.log import log
  
  from aiocache import caches, cached
  
  
  app = Sanic(__name__)
  
  
  config = {
      "default": {
          "cache": "aiocache.RedisCache",
          "endpoint": "127.0.0.1",
          "timeout": 2,
          "namespace": "sanic",
          "serializer": {
              "class": "aiocache.serializers.JsonSerializer"
          }
      }
  }
  
  
  @app.listener('before_server_start')
  def init_cache(sanic, loop):
      caches.set_config(config)
  
  
  # You can use alias or pass explicit args instead
  @cached(key="my_custom_key", ttl=30, alias="default")
  async def expensive_call():
      log.info("Expensive has been called")
      await asyncio.sleep(3)
      # You are storing the whole dict under "my_custom_key"
      return {"test": str(uuid.uuid4())}
  
  
  async def get_cache_value():
      # This lazy loads a singleton so it will return the same instance every
      # time. If you want to create a new instance, you can use
      # `caches.create("default")`
      cache = caches.get("default")
      return await cache.get("my_custom_key")
  
  
  @app.route("/")
  async def test(request):
      log.info("Received GET /")
      return json(await expensive_call())
  
  
  @app.route("/retrieve")
  async def test(request):
      log.info("Received GET /retrieve")
      return json(await get_cache_value())
  
  
  app.run(host="0.0.0.0", port=8000)
  
subject: Update aiocache example to latest version