A high-performance async caching solution for Python with extended features
Project description
async-cache-ext
A high-performance async caching solution for Python with extended features
A lightweight, efficient caching solution designed specifically for asyncio applications. Supports both LRU (Least Recently Used) and TTL (Time To Live) caching strategies with a clean, decorator-based API.
Features
- 🚀 Async-First: Built specifically for asyncio applications
- 🔄 Multiple Cache Types:
- LRU (Least Recently Used) cache
- TTL (Time To Live) cache
- 🎯 Flexible Key Generation: Works with primitive types, custom objects, and ORM models
- 🛠 Configurable: Adjustable cache size and TTL duration
- 🧹 Cache Management: Clear cache on demand
- 💡 Smart Argument Handling: Skip specific arguments in cache key generation
- 🔍 Cache Bypass: Ability to bypass cache for specific calls
Installation
pip install async-cache-ext
Basic Usage
LRU Cache
The LRU cache maintains a fixed number of items, removing the least recently used item when the cache is full.
from cache import AsyncLRU
@AsyncLRU(maxsize=128)
async def get_user_data(user_id: int) -> dict:
# Expensive database operation
data = await db.fetch_user(user_id)
return data
TTL Cache
The TTL cache automatically expires entries after a specified time period.
from cache import AsyncTTL
@AsyncTTL(time_to_live=60, maxsize=1024)
async def get_weather(city: str) -> dict:
# External API call
weather = await weather_api.get_data(city)
return weather
Advanced Usage
Working with Custom Objects
The cache works seamlessly with custom objects and ORM models:
from dataclasses import dataclass
from cache import AsyncLRU
@dataclass
class UserFilter:
age: int
country: str
status: str
@AsyncLRU(maxsize=128)
async def filter_users(filter_params: UserFilter) -> list:
# Complex filtering operation
users = await db.filter_users(
age=filter_params.age,
country=filter_params.country,
status=filter_params.status
)
return users
Skipping Arguments
Useful for methods where certain arguments shouldn't affect the cache key:
from cache import AsyncTTL
class UserService:
@AsyncTTL(time_to_live=300, maxsize=1000, skip_args=1)
async def get_user_preferences(self, user_id: int) -> dict:
# 'self' is skipped in cache key generation
return await self.db.get_preferences(user_id)
Cache Management
Bypassing Cache
# Normal cached call
result = await get_user_data(123)
# Force fresh data
fresh_result = await get_user_data(123, use_cache=False)
Clearing Cache
# Clear the entire cache
get_user_data.cache_clear()
Performance Considerations
- The LRU cache is ideal for frequently accessed data with no expiration requirements
- The TTL cache is perfect for data that becomes stale after a certain period
- Choose
maxsizebased on your memory constraints and data access patterns - Consider using
skip_argswhen caching class methods to avoid instance-specific caching
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file async_cache_ext-1.1.1.tar.gz.
File metadata
- Download URL: async_cache_ext-1.1.1.tar.gz
- Upload date:
- Size: 8.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d1038ba375c9383842d569aa4d66af5aa3dc6042c03659497b94b60712bc52c
|
|
| MD5 |
ec115fef1a27eaa5ab7bb173a542af11
|
|
| BLAKE2b-256 |
fd3c470350183b91d9fdaa518a63f3cd7d241c1bc9c8f7db0d6fd27faef7c69e
|
File details
Details for the file async_cache_ext-1.1.1-py3-none-any.whl.
File metadata
- Download URL: async_cache_ext-1.1.1-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87ecd85684ec2d1a8cc56a9e2a0681c20c18680f418f9e45a1240617be88d49f
|
|
| MD5 |
b70f686982549835de77df69b70e7f15
|
|
| BLAKE2b-256 |
d46b701fbb8fe5223a75a912a16b974ac42f0f9a2fd3faffd34ec9b1386fa0f9
|