Implements high level function caching to any backend with a decorator
pip install redis_cache_decorator
from cache_deco import Cache
from backends.redis.redis_backend import RedisBackend
# Create your cache backend
redis = RedisBackend('localhost', 6379)
# Use this backend as your cache
c = Cache(redis)
@c.cache()
def my_method(a, b, c):
return a ** b ** c
expiration
: Number of seconds to keep the result in the cache. Defaults to 60 seconds when not specified.
e.g.
@c.cache(expiration=100)
def my_method():
...
signature_generator
: Callable function that generates the signature to cache on. The default signature generator will be used if not specified.
e.g.
def sig_gen(*args, **kwargs):
return "?".join(args)
@c.cache(signature_generator=sig_gen)
def my_method():
...
invalidator
: Boolean to determine whether or not to return a cache invalidating function
e.g.
@c.cache(invalidator=True)
def my_method():
...
Now when you call my_method
, it will return two values. The first value is the cached return if a cache hit occurs, otherwise it's the return value from executing the function.
The second value is a callable function to invalidate the cache.
return_value, invalidator = my_method()
To invalidate the cached return, just call the invalidator:
invalidator()
You can use any backend for the cache by implementing the base class
Check for any open issues, or open one yourself! All contributions are appreciated.
nosetests