Skip to main content

Library that allows you to compose your own cache, pre-packaged with many useful caches

Project description

██████╗ █████╗  ██████╗██╗  ██╗██████╗   
██╔════╝██╔══██╗██╔════╝██║  ██║██╔══██╗  
██║     ███████║██║     ███████║██████╔╝  
██║     ██╔══██║██║     ██╔══██║██╔══██╗  
╚██████╗██║  ██║╚██████╗██║  ██║██║  ██║  
╚═════╝╚═╝  ╚═╝ ╚═════╝╚═╝  ╚═╝╚═╝  ╚═╝  

cachr: superfast, composable caching for Python

Testing Codecov
Package PyPI Latest Release PyPI Downloads
Meta GitHub License

cachr is a Python package that provides superfast, composable caches designed to optimize your applications in an easy and intuitive way. It aims to be the go-to package to use and build caches that make your applications superfast, memory-efficient and user-friendly.

pip install cachr

Table of Contents

Main Features

  • 🐍 Pure Python
  • 🖌 Easily extendable
  • 👨‍🎨 User-friendly

Usage Example

At the moment there are five caches available for use:

  • LFUCache: Removes the least frequently used item in the cache when it overflows
  • LRUCache: A Least Recently Used Cache removes the least recently used item when it overflows
  • RandomReplaceCache: randomly expells an item from the cache when it overflows
  • TTLCache: A Time-To-Live-cache acts like a LRUCache and also removes an entry from the cache after a certain expiration time
  • SlidingWindowCache: Like a TTLCache but it renews the expiration date eacht time an item is requested from the cache.

All caches are added to your code in two ways: by decorator or as a regular object. Decorator:

import time
from cachr import LRUCache


# 1. Decorate your function
@LRUCache(capacity=2)
def add(i, y):
    time.sleep(1)
    print("adding..")
    return i + y


print(add(1, 2))    # <-- takes a second to calculate
print(add(1, 2))    # <-- takes value from cache immediately 
print(add(1, 2))    # <-- takes value from cache immediately 

Object:

from cachr import TTLCache

my_cache =  TTLCache(capacity=25, ttl_seconds=60)

def very_expensive_function(number:int) -> int:
    return number * number

for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 5, 7, 9, 1, 1, 1, 1]:
    value_from_cache = my_cache.get(i)
    if value_from_cache is not None:
        print(f"Answer for {i} is {value_from_cache}")
        continue
    print(f"calculating expensive function for {i}..")
    my_cache.put(key=i, value=very_expensive_function(number=i))

Installation

pip install cachr

The source code is currently hosted on GitHub at: https://github.com/mike-huls/cachr

Binary installers for the latest released version are available at the Python Package Index (PyPI).

Dependencies

Cachr has no Python dependencies

License

MIT

Documentation

🔨 Under construction

Development

Find the changelog and list of upcoming features here.
Contributions are always welcome; feel free to submit bug reports, bug fixes, feature requests, documentation improvements or enhancements!


Go to Top

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cachr-0.0.8.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

cachr-0.0.8-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file cachr-0.0.8.tar.gz.

File metadata

  • Download URL: cachr-0.0.8.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.1.0-26-amd64

File hashes

Hashes for cachr-0.0.8.tar.gz
Algorithm Hash digest
SHA256 788b1bed97f401ec738101934f515a2f435e0904140218ba8a2c0d935c140f10
MD5 f31c4dd4392c27f877b954776a888c30
BLAKE2b-256 696015c8d62f275cfdb4a5ec22a5b64733f213396704bf5a8bc8c7d46cc57590

See more details on using hashes here.

File details

Details for the file cachr-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: cachr-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.1.0-26-amd64

File hashes

Hashes for cachr-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 a10f3a74259b5a44e5b9b2b86adeb647d0c0b16d3c04cce5b14f1bfdde7360e2
MD5 163a9543fb221c445161a721d3a81637
BLAKE2b-256 984bca13a28bb3c7227841e3ac028869ab9b4a217bdf30054254ddcfc5984b06

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page