Python caching library with tag-based invalidation and dogpile effect prevention
Project description
HermesCache
Hermes is a Python caching library. It was designed to fulfil the following requirements:
Tag-based O(1) cache invalidation
Dogpile effect (cache stampede) mitigation
Support for multi-threaded, multi-process, multi-machine & asynchronous operation
Cache compression
Modular design (pluggable backends, compressors, serialisers, etc.)
Simple yet flexible decorator API
Implemented backends: redis, memcached, inprocess.
Installation
pip install HermesCache
For Redis (or protocol-compatible alternatives) and Memcached it has the following extra dependencies.
HermesCache[redis] |
Pure Python Redis client |
HermesCache[redis-ext] |
Pure Python Redis client & C extension parser |
HermesCache[memcached] |
Pure Python Memcached client |
Quickstart
The following demonstrates the most of the package’s API.
import hermes.backend.redis
cache = hermes.Hermes(
hermes.backend.redis.Backend,
ttl = 600,
host = 'localhost',
db = 1,
)
@cache
def foo(a, b):
return a * b
class Example:
@cache(tags = ('math', 'power'), ttl = 1200)
def bar(self, a, b):
return a ** b
@cache(tags = ('math', 'avg'), key = lambda fn, a, b: f'avg:{a}:{b}')
def baz(self, a, b):
return (a + b) / 2
print(foo(2, 333))
example = Example()
print(example.bar(2, 10))
print(example.baz(2, 10))
foo.invalidate(2, 333)
example.bar.invalidate(2, 10)
example.baz.invalidate(2, 10)
cache.clean(['math']) # invalidate entries tagged 'math'
cache.clean() # flush cache