Skip to main content

dcache

PyPI Coverage Status Documentation Status

Distributed Cache for Humans

Installation

pip install dcache

How to Use

  • TODO

Contributing

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

Pitch (Portuguese)

What is

  • distributed cache for humans

  • simple API like lru_cache

  • multiple backends

  • easy to switch the backend

  • good documentation

API

dcache

from dcache import dcache

@dcache
def slow_function(n):
    return n ** 1000

dcache vs redis

import redis
redis = redis.Redis(host='localhost', port=6379, db=0)

def slow_function(n):
    cached = redis.get(n)
    if cached:
        return cached
    value = n ** 1000
    redis.set(n, value)
    return value

def slow_function2(n):
    cached = redis.get(n)
    if cached:
        return cached
    value = n ** 1000
    redis.set(n, value)
    return value
from dcache import cache
from dcache.backends import RedisBackend

cache = dcache(RedisBackend(host='localhost', port=6379, db=0))

@cache
def slow_function(n):
    return n ** 1000

@cache
def slow_function2(n):
    return n ** 1000

real example

def process(id, input):
    cache_path = get_content_cache_path(id, input)

    if resource.file_exist(cache_path):
        return resource.get_json(cache_path)

    response = slow_function(id, input)
      resource.put_json(body=response, file_path=cache_path)
    return response
from dcache import dcache
from dcache.backends import S3Backend

@dcache(S3Backend())
def process(id, input):
    return slow_function(id, input)

Ideas

  • integration tests using containers

multiple backends

from dcache import dcache
from dcache.backends import InMemoryBackend, RedisBackend

@dcache(multiple=[
    InMemoryBackend(),
    RedisBackend(host='localhost', port=6379, db=0),
])
def slow_function(n):
        return n ** 1000
  1. search on the in-memory cache;

  2. 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

MVP

  • in memory

Roadmap

  • backends: Redis, Memcached, Filesystem, database, S3, etc.

  • multiple backends

  • plugins

Changelog

(unreleased)

  • Add InMemory backend

0.0.1 (2022-07-30)

  • First release on PyPI.

Metadata

Release files for dcache 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dcache 0.0.2
File Size Uploaded
dcache-0.0.2.tar.gz 18.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dcache 0.0.2
File Interpreter ABI Platform
dcache-0.0.2-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 33.1 kB

Release files / dcache-0.0.2.tar.gz

Download URL dcache-0.0.2.tar.gz
Size 18.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2142a1acd679bd799a1a0317c90db048eb0ab1e2fb1337fa9ff8fe80dc612e1d
BLAKE2b-256 checksum
How to use checksums
6fcb7eb72963636cb449bcd73738909f951a8e6915faae1fdb959b5332662490
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.10

Release files / dcache-0.0.2-py2.py3-none-any.whl

Download URL dcache-0.0.2-py2.py3-none-any.whl
Size 14.3 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
32ca2b762bf30a6d7458e493f26c974acee708107bdcd8245ecff9f08cda4b87
BLAKE2b-256 checksum
How to use checksums
a49b1cc6c944d8da6cc59bf5ce52722bdb29a3412b3ac876d39863e264c9da76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.10

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page