Skip to main content

Python cache decorator and other itils with support for Redis or KeyDB

Project description

redis-cached

Python cache decorator that uses Redis or KeyDB as storage. This is very handy for replicated apps (e.g. Kubernetes), AWS Lambda functions, and other stateless apps.

Features:

  • Function result and kwarg values are pickled, so you can work with complex structures like pydantic's BaseModel
  • Prevents multiple simultaneous cache updates when a function is called concurrently and there is no cached value.
  • Cache invalidation is available

Limitations:

  • Only async functions are supported.
  • Only keyword arguments are supported. It will raise an error if you pass non-kwargs while calling your function.

Installation

pip install redis_cached

Usage

Basic usage:

import asyncio
from redis_cached import Cache

cache = Cache()

@cache.cached(5)
async def get_user_data(user_id: int):
    # expensive API call here
    return {'user_id': user_id, 'name': 'John Doe'}

async def main():
    user_data = await get_user_data(user_id=1)  # result is cached for 5 seconds
    
    # To invalidate the cache for the user with ID 1, pass the same kwargs:
    await cache.invalidate_cache('get_user_data', user_id=1)

asyncio.run(main())

Optionally, add salt to cache_key_salt to avoid clashing with the same-named functions in other modules or other apps that use the same Redis database.

You can also use your custom-configured async Redis instance with the cache.

import asyncio
from redis.asyncio.client import Redis
from redis_cached import Cache

custom_redis = Redis(
    host='localhost',
    port=6379,
    db=0
)
cache = Cache(
    cache_key_salt='qhDwh9Y',
    redis_=custom_redis
)

@cache.cached(5)
async def get_user_data(user_id: int):
    # expensive API call here
    return {'user_id': user_id, 'name': 'John Doe'}

async def main():
    user_data = await get_user_data(user_id=1)  # cached
    await cache.invalidate_cache('get_user_data', user_id=1)  # invalidated

asyncio.run(main())

Contributing

Contributions are welcome. Please refer to the maintenance readme for more details.

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

redis_cached-0.4.5.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

redis_cached-0.4.5-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file redis_cached-0.4.5.tar.gz.

File metadata

  • Download URL: redis_cached-0.4.5.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.3 Darwin/24.2.0

File hashes

Hashes for redis_cached-0.4.5.tar.gz
Algorithm Hash digest
SHA256 213240f9166f5a0ea243e959603598f370ef45b22ada43ea6b95b30ae7c4debc
MD5 01eb8dcd96ab462ed57a3865c23c170a
BLAKE2b-256 49f45a511af7ff4d4078a5b5a5694e837e93c6d66a6865ad176b9809df4f6d3e

See more details on using hashes here.

File details

Details for the file redis_cached-0.4.5-py3-none-any.whl.

File metadata

  • Download URL: redis_cached-0.4.5-py3-none-any.whl
  • Upload date:
  • Size: 4.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.3 Darwin/24.2.0

File hashes

Hashes for redis_cached-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 b30b90dc8aa7462ff3f3a7741275dad2a7d688dfb17a0100a0949b76dca173b3
MD5 1fd4be7d535af5cf5bf69190c64d059d
BLAKE2b-256 c5e316570db717fe73f77e65f6d3b961e2e4e1a9d3394aa0cc7c8677cb1bf8f4

See more details on using hashes here.

Supported by

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