A collection of cache helpers
Project description
Useful cache helpers in one package!
Install
pip install cachelper
Helpers
In memory cache
memoize
Caching function return values in memory.
import cachelper
@cachelper.memoize()
def fibo(n):
if n in (0, 1):
return 1
return fibo(n - 1) + fibo(n - 2)
fibo(10)
Cache with Redis/Memcached
Using the HelperMixin
HelperMixin can be used with any cache client classes that implement the following methods:
def get(self, key)
def set(self, key, value, timeout=None)
def delete(self, key)
def get_many(self, keys)
def set_many(self, mapping, timeout=None)
For example, RedisCache from werkzeug is one such class:
from redis import StrictRedis
from werkzeug.contrib.cache import RedisCache as _RedisCache
from cachelper import HelperMixin
class RedisCache(_RedisCache, HelperMixin):
'''werkzeug.contrib.cache.RedisCache mixed with HelperMixin'''
def get_many(self, keys):
return super().get_many(*keys)
rds = StrictRedis()
cache = RedisCache(rds)
This mixin defines these methods: call, map, __call__. If your class already defines methods of the same name, the mixin methods may not work correctly.
cache decorator
Add cache by decorating a function or method.
@cache("key-{user_id}", timeout=300)
def get_name(user_id):
# Fetch user name from database
...
The cache key template can also be a function which acts as a key factory:
def name_key(user_id):
return "key-%s" % user_id
@cache(name_key, timeout=300)
def get_name(user_id):
# Fetch user name from database
...
Just make sure the key factory function accepts the same parameters as the cached function and returns the key.
cached function calls
Sometimes we don’t want to cache all calls to a specific function. So the decorator is not suitable, we may cache the call instead the function in this case:
def get_name(user_id):
# Fetch user name from database
...
user_id = 42
key = "key-{user_id}".format(user_id=user_id)
cache.call(lambda: get_name(user_id), key, timeout=300)
cached multiple calls
For most cache backends, it’s much faster to get or set caches in bulk.
def get_name(user_id):
# Fetch user name from database
...
user_ids = [1, 2, 42, 1984]
names = cache.map("key-{user_id}", get_name, user_ids, timeout=300)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file cachelper-0.3.0.tar.gz
.
File metadata
- Download URL: cachelper-0.3.0.tar.gz
- Upload date:
- Size: 3.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b61f1a1e55f3752cb9bd29512276b12483b37e043f55f719b868ac4a27014e67 |
|
MD5 | bf599f49beb278b9a8ebd3f9cd079f25 |
|
BLAKE2b-256 | 6ccc75392124b0df3c76708011240c7f70c27ab510b883f3d538c277f489fe2f |