Last updated:
0 purchases
HermesCache 1.0.0
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 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
Note
The API encourages import-time instantiation of Hermes facade to allow
decoration of existing classes and functions, to make caching transparent
to them. The instantiation has no side-effects. Underlying backend
connections are lazy.
Moreover, if backend configuration is only available at runtime,
Hermes.backend instance can be replaced at runtime.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.