Welcome to aiocache’s documentation!¶
Installing¶
pip install aiocache
pip install aiocache[redis]
pip install aiocache[memcached]
pip install aiocache[redis,memcached]
Usage¶
Using a cache is as simple as
>>> import asyncio
>>> from aiocache import Cache
>>> cache = Cache()
>>> with asyncio.Runner() as runner:
>>> runner.run(cache.set("key", "value"))
True
>>> runner.run(cache.get("key"))
'value'
Here we are using the SimpleMemoryCache but you can use any other listed in Caches. All caches contain the same minimum interface which consists on the following functions:
add
: Only adds key/value if key does not exist. Otherwise raises ValueError.get
: Retrieve value identified by key.set
: Sets key/value.multi_get
: Retrieves multiple key/values.multi_set
: Sets multiple key/values.exists
: Returns True if key exists False otherwise.increment
: Increment the value stored in the given key.delete
: Deletes key and returns number of deleted items.clear
: Clears the items stored.raw
: Executes the specified command using the underlying client.
You can also setup cache aliases like in Django settings:
1import asyncio
2
3from aiocache import caches, Cache
4from aiocache.serializers import StringSerializer, PickleSerializer
5
6caches.set_config({
7 'default': {
8 'cache': "aiocache.SimpleMemoryCache",
9 'serializer': {
10 'class': "aiocache.serializers.StringSerializer"
11 }
12 },
13 'redis_alt': {
14 'cache': "aiocache.RedisCache",
15 'endpoint': "127.0.0.1",
16 'port': 6379,
17 'timeout': 1,
18 'serializer': {
19 'class': "aiocache.serializers.PickleSerializer"
20 },
21 'plugins': [
22 {'class': "aiocache.plugins.HitMissRatioPlugin"},
23 {'class': "aiocache.plugins.TimingPlugin"}
24 ]
25 }
26})
27
28
29async def default_cache():
30 cache = caches.get('default') # This always returns the same instance
31 await cache.set("key", "value")
32
33 assert await cache.get("key") == "value"
34 assert isinstance(cache, Cache.MEMORY)
35 assert isinstance(cache.serializer, StringSerializer)
36
37
38async def alt_cache():
39 # This generates a new instance every time! You can also use
40 # `caches.create("alt", namespace="test", etc...)` to override extra args
41 cache = caches.create("redis_alt")
42 await cache.set("key", "value")
43
44 assert await cache.get("key") == "value"
45 assert isinstance(cache, Cache.REDIS)
46 assert isinstance(cache.serializer, PickleSerializer)
47 assert len(cache.plugins) == 2
48 assert cache.endpoint == "127.0.0.1"
49 assert cache.timeout == 1
50 assert cache.port == 6379
51 await cache.close()
52
53
54async def test_alias():
55 await default_cache()
56 await alt_cache()
57
58 cache = Cache(Cache.REDIS)
59 await cache.delete("key")
60 await cache.close()
61
62 await caches.get("default").close()
63
64
65if __name__ == "__main__":
66 asyncio.run(test_alias())
In examples folder you can check different use cases:
Contents¶
- Caches
- Serializers
- Plugins
- BasePlugin
BasePlugin
BasePlugin.add_hook()
BasePlugin.do_nothing()
BasePlugin.post_add()
BasePlugin.post_clear()
BasePlugin.post_delete()
BasePlugin.post_exists()
BasePlugin.post_expire()
BasePlugin.post_get()
BasePlugin.post_increment()
BasePlugin.post_multi_get()
BasePlugin.post_multi_set()
BasePlugin.post_raw()
BasePlugin.post_set()
BasePlugin.pre_add()
BasePlugin.pre_clear()
BasePlugin.pre_delete()
BasePlugin.pre_exists()
BasePlugin.pre_expire()
BasePlugin.pre_get()
BasePlugin.pre_increment()
BasePlugin.pre_multi_get()
BasePlugin.pre_multi_set()
BasePlugin.pre_raw()
BasePlugin.pre_set()
- TimingPlugin
TimingPlugin
TimingPlugin.post_add()
TimingPlugin.post_clear()
TimingPlugin.post_delete()
TimingPlugin.post_exists()
TimingPlugin.post_expire()
TimingPlugin.post_get()
TimingPlugin.post_increment()
TimingPlugin.post_multi_get()
TimingPlugin.post_multi_set()
TimingPlugin.post_raw()
TimingPlugin.post_set()
TimingPlugin.save_time()
- HitMissRatioPlugin
- BasePlugin
- Configuration
- Decorators
- Locking
- Testing