Distributed Cache for Humans
- Documentation: https://dcache.readthedocs.io.
pip install dcache- TODO
Contributions are welcome, feel free to open an Issue or Pull Request.
Pull requests must be for the develop branch.
git clone https://github.com/HBN3tw0rk/dcache
cd dcache
git checkout develop
python -m venv .venv
pip install -r requirements_dev.txt
pre-commit install
pytest- Part 1: https://www.loom.com/share/ee553d6915ca4dc5ba8609d48b59bd55
- Part 2: https://www.loom.com/share/50cb4ff9560943879d78864f5fa1b4e0
- distributed cache for humans
- simple API like lru_cache
- multiple backends
- easy to switch the backend
- good documentation
fromdcacheimportdcache@dcachedefslow_function(n):
returnn**1000importredisredis=redis.Redis(host='localhost', port=6379, db=0)
defslow_function(n):
cached=redis.get(n)
ifcached:
returncachedvalue=n**1000redis.set(n, value)
returnvaluedefslow_function2(n):
cached=redis.get(n)
ifcached:
returncachedvalue=n**1000redis.set(n, value)
returnvaluefromdcacheimportcachefromdcache.backendsimportRedisBackendcache=dcache(RedisBackend(host='localhost', port=6379, db=0))
@cachedefslow_function(n):
returnn**1000@cachedefslow_function2(n):
returnn**1000defprocess(id, input):
cache_path=get_content_cache_path(id, input)
ifresource.file_exist(cache_path):
returnresource.get_json(cache_path)
response=slow_function(id, input)
resource.put_json(body=response, file_path=cache_path)
returnresponsefromdcacheimportdcachefromdcache.backendsimportS3Backend@dcache(S3Backend())defprocess(id, input):
returnslow_function(id, input)- integration tests using containers
fromdcacheimportdcachefromdcache.backendsimportInMemoryBackend, RedisBackend@dcache(multiple=[InMemoryBackend(),RedisBackend(host='localhost', port=6379, db=0),])defslow_function(n):
returnn**1000- search on the in-memory cache;
- if exists, return, if not, search on Redis;
- if exists on Redis, save in memory and return;
- if not, exists on Redis, run the slow_function, save on Redis, save in-memory and return;
- doesn't run if already returned
- in memory
- backends: Redis, Memcached, Filesystem, database, S3, etc.
- multiple backends
- plugins