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 cached, invalidate_cache
@cached(5)
async def add_one(x):
return x + 1
async def main():
result = await add_one(x=2) # result is cached for 5 seconds
# Pass the same kwargs to this func to invalidate the cache
await invalidate_cache('add_one', x=2)
asyncio.run(main())
Optionally, add salt to the decorator to avoid clashing with the same-named functions in other modules or other apps that use the same Redis or KeyDB database:
import asyncio
from redis_cached import cached, invalidate_cache
CACHE_SALT = 'XnsJ-7C9PIU0qhDwh9YhJQ'
@cached(5, cache_key_salt=CACHE_SALT)
async def add_one(x):
return x + 1
async def invalidate_add_one(**kwargs):
await invalidate_cache('add_one', cache_key_salt=CACHE_SALT, **kwargs)
async def main():
result = await add_one(x=2) # cached
await invalidate_add_one(x=2) # invalidated
asyncio.run(main())
Contributing
Contributions are welcome. Please refer to 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.3.0.tar.gz
(3.7 kB
view details)
Built Distribution
File details
Details for the file redis_cached-0.3.0.tar.gz
.
File metadata
- Download URL: redis_cached-0.3.0.tar.gz
- Upload date:
- Size: 3.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.3 Darwin/23.3.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c319a212cdbdb7edb65562d73f12e54672c47517578f4b8de2c2506c7c80a224 |
|
MD5 | 89bb161a7fbc001a5270068f3a5ebd1a |
|
BLAKE2b-256 | 7d8a9dcc650835eb108638cb30f4a5232cd2a37913ca9fe14cd33d606ca8b32e |
File details
Details for the file redis_cached-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: redis_cached-0.3.0-py3-none-any.whl
- Upload date:
- Size: 4.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.3 Darwin/23.3.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 96682623e91ed32400943809dcf79f7e9ca2b3cb64f18dc8e491f1eb42d5d67d |
|
MD5 | 3d39389c78294f457269761b5d93de14 |
|
BLAKE2b-256 | b78e491e6c9c0d8b9281fddac2113312345f3eb884750cc92bfbd431ce3256ab |